Подтвердить что ты не робот

Как изменить фокус на новую всплывающую вкладку в Selenium?

Я использую Selenium и Firefox.

У меня есть ссылка на странице (например, linkA), которая открывает новую страницу на новой вкладке. Новая вкладка отображается при нажатии ссылки. Затем я хочу взаимодействовать с новой страницей.

Вот мой селен script:

  • нажмите ссылкуA
  • pause 5000
  • selectWindow Title
  • нажмите ссылкуB (обратите внимание: ссылка B находится на новой странице)

Селен не может идентифицировать новую вкладку. Он сообщает:

[warn] Ссылка имеет цель '_blank', которая не поддерживается в Selenium! Ранжирование цели: selenium_blank24003

Есть ли способ сказать Selenium для взаимодействия с отображаемой вкладкой?

4b9b3361

Ответ 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.

}