Как изменить фокус на новую всплывающую вкладку в Selenium?
Я использую Selenium и Firefox.
У меня есть ссылка на странице (например, linkA), которая открывает новую страницу на новой вкладке. Новая вкладка отображается при нажатии ссылки. Затем я хочу взаимодействовать с новой страницей.
Вот мой селен script:
- нажмите ссылкуA
- pause 5000
- selectWindow Title
- нажмите ссылкуB (обратите внимание: ссылка B находится на новой странице)
Селен не может идентифицировать новую вкладку. Он сообщает:
[warn] Ссылка имеет цель '_blank', которая не поддерживается в Selenium! Ранжирование цели: selenium_blank24003
Есть ли способ сказать Selenium для взаимодействия с отображаемой вкладкой?
Ответы
Ответ 1
Вы пытались добавить windowFocus между selectWindow и кликом linkB?
Изменить:
selectWindow принимает Javascript windowID. Указывает ли ваш linkA идентификатор окна для Selenium?
Вот полная первая тестовая страница (t1.html), в окне window.open второй параметр - "WindowTest", это идентификатор окна javascript, который ищет selenium.
<a href="javascript:void(0);" name="t1"
onclick="window.open('t2.html', 'WindowTest', 'width=450,height=600');">
test
</a>
Вот вторая тестовая страница (t2.html):
<a href="t1.html" name="t2">2test2</a>
Запуск script заканчивается всплывающим окном на t1.html
Мой script
click link=test
pause 5000
selectWindow WindowTest
windowFocus
click link=2test2
Ответ 2
Привет, попробуйте этот.
Set<String> winSet = driver.getWindowHandles();
List<String> winList = new ArrayList<String>(winSet);
String newTab = winList.get(winList.size() - 1);
System.out.println("winList: "+winList.size());
//driver.close(); // close the original tab
driver.switchTo().window(newTab);
Ответ 3
Это сработало для меня.
[info] Executing: |storeEval | this.browserbot.findElement('link=Pastanet').href | Link_PastaNet |
[info] Executing: |openWindow | ${Link_PastaNet} | MyWindows |
Ответ 4
Вот шаги, которые я предпринял для Selenium IDE:
- найти интересующую ссылку
- удалите атрибут "target" из ссылки
- скопировать назначение href в переменной (myUrl)
- изменить ссылку href- > javascript: window.open(myUrl, myWindow)
- нажмите ссылку
- выберите окно 'myWindow
getEval | this.page(). findElement ('link = щелкните здесь).removeAttribute(' target) ||
storeEval | this.page(). findElement ('link = щелкните здесь).href | myUrl
getEval | this.page(). findElement ('link = click here).href= "javascript: window.open(' ${myUrl}, 'myWindow)" ||
нажмите | link = нажмите здесь ||
пауза | 1000 ||
selectWindow | name = myWindow ||
Ответ 5
lericain59 отправил меня в правильном направлении, хотя мне пришлось внести несколько изменений, поскольку он работает с моей версией Selenium IDE (я выполняю 1.0.6). Кроме того, для моих целей мне не нужно было проверять так много, что он открывался в отдельном окне, только чтобы оно открывало правильное окно.
Здесь script, который работал у меня.
- storeEval | this.browserbot.findElement('link = click here'). href | myUrl |
- открыть | ${myUrl} ||
this.page() не работает. Кажется, он был заменен на this.browserbot. Кроме того, я просто открыл страницу напрямую - она избегает ручной паузы и имеет меньше шагов.
Ответ 6
Iterator<String> windowIterator = driver.getWindowHandles().iterator();while (windowIterator.hasNext()) {
String windowHandle = windowIterator.next();
driverwindow = driver.switchTo().window(windowHandle);
if (_driverwindow.getTitle().equals("Title of the window to switch")) {
}
}
Ответ 7
Просто используйте этот код.
public void newtab(){
System.setProperty("webdriver.chrome.driver", "E:\\eclipse\\chromeDriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.w3schools.com/tags/att_a_target.asp");
//I have provided a sample link. Make sure that you have provided the correct link in the above line.
driver.findElement(By.className("tryitbtn")).click();
new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")), Keys.NUMPAD2).build().perform();
// In keyboard we will press
//ctrl+1 for 1st tab
//ctrl+2 for 2nd tab
//ctrl+3 for 3rd tab.
//Same action is written in the above code.
}