Во время тестирования часто возникает потребность работы в двух страницах браузера попеременно (не путайте с работой в нескольких открытых браузерах). В этой статье мы рассмотрим как можно открыть страницу в новом окне.
При нажатии на ссылку документ откроется в новом окне только в том случае, если необязательный параметр ссылки target
установлен в _blank
. По умолчанию же при переходе по ссылке документ открывается в текущем окне или фрейме. Специальных средств для открытия страницы в новом окне в Selenium нет, но это можно реализовать с помощью javascript:
import org.openqa.selenium.JavascriptExecutor; /** * Открыть url в новом окне * @param url - url страницы */ public void openInNewWindow(String url) { ((JavascriptExecutor) driver) .executeScript("window.open(arguments[0])", url); }
В метод можно передать статический url, либо получить его из атрибута href необходимой ссылки на странице. Обратите внимание, что getAttribute("href")
вернет нормализованное представление ссылки, т.е. полную абсолютную ссылку, даже если в атрибуте ссылка была указана относительная.
Короткий пример использования:
driver.get("http://internetka.in.ua"); WebElement link = driver.findElement(By.tagName("a")); openInNewWindow(link.getAttribute("href"));
И раз уж мы открываем новое окно сами, то можно немного модифицировать код, чтобы сразу получить имя открытого окна, которое можно будет использовать в методе switchTo
для переключения драйвера в это окно:
/** * Открыть url в новом окне * @param url - url страницы * @return имя нового открытого окна */ public String openInNewWindow(String url) { String name = "some_random_name"; ((JavascriptExecutor) driver) .executeScript("window.open(arguments[0],\"" + name + "\")", url); return name; }
Обязательно генерируйте имя для каждого нового окна, потому что если окно с заданным именем уже существует, то вместо открытия нового, javascript загрузить url в существующее окно с таким именем.
Как дождаться открытия нового окна и переключиться в него будет рассмотрено в следующей статье.
Здравствуйте,есть вот такой интересный вопрос. В target команды type можно ли url картинок. В частности встретился с такой проблемой при тесте приложения в VK. оно вроде скидывается,ставил Timeout, но картинка не подгружалась и выплывала только ссылка на нее.
Возможно ли какими-то способами ее подгрузить?
Добрый день, параметр target отвечает за то где именно будет отображена ссылка, например, в новом окне. У изображений такой параметр отсутствует.
Подгрузить картинку средствами селениум не получится, нужно разбираться почему она не загружается в первую очередь.
Причин может быть много, возможно, неверно настроен профиль браузера для тестирования.
На тестирование iframe-приложения может влиять все, даже урл по которому Вы непосредственно обращаетесь, иногда передача захардкоженных параметров в урл может влиять на загрузку данных внутри iframe.