Как переместить фокус селена в окно новой вкладки?

Я нажимаю на ссылку, которая приводит к новой вкладке. Я хочу перейти на эту вкладку, закрыть эту вкладку, а затем снова вернуться в родительское окно.

Я написал следующий код, который показывает ошибку. На самом деле в моем коде управление не перемещается в дочернее окно. Пожалуйста, посмотрите следующий код и помогите мне:

WebDriver driver;
System.setProperty("Webdriver.chrome.driver", "chromedriver.exe");
driver = new ChromeDriver();
driver.get("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open");
String parent_window = driver.getWindowHandle();
driver.switchTo().frame("iframeResult");
driver.findElement(By.xpath("//button[contains(text(),'Try it')]")).click();
Thread.sleep(4000);
String child_window = driver.getWindowHandle();
System.out.println(parent_window);
System.out.println(child_window);

person Mamta Gupta    schedule 03.08.2018    source источник
comment
Работает нормально? В чем проблема   -  person iamsankalp89    schedule 03.08.2018


Ответы (3)


Вы также можете использовать этот вид кода для переключения между вкладками.

public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "Location of chromedriver exe file");

System.out.println("Ready to launch the browser");
WebDriver driver = new ChromeDriver();
driver.get("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open");
driver.switchTo().frame("iframeResult");
driver.findElement(By.xpath("//button[contains(text(),'Try it')]")).click();
Thread.sleep(4000);

  //store parent window value in string
  String parentWindow = driver.getWindowHandle();

  //store the set of all windows
  Set<String> allwindows= driver.getWindowHandles();

  for (String childWindow : allwindows) {
    if(!childWindow.equals(parentWindow))
      {
        driver.switchTo().window(childWindow);
        System.out.println("child window");
        System.out.println(driver.getTitle());      
        // do some operation
        //Closing the Child Window.
         driver.close();    
     }
    }
    driver.switchTo().window(parentWindow);
    System.out.println("Parent window");
    System.out.println(driver.getTitle());      
}
person iamsankalp89    schedule 03.08.2018

Управление не перемещается в дочернее окно, потому что вы не захватываете дескриптор дочернего окна и не переключаетесь на него. Когда новая вкладка открыта, вам нужно найти все дескрипторы окон с помощью метода getWindowHandles(). Первое значение в наборе, возвращаемом методом getWindowHandles(), будет дескриптором родительского окна, а второе значение будет дескриптором дочернего окна. Если вы хотите выполнить какую-либо операцию над дочерним окном, вам нужно сначала переключиться на него с помощью driver.switchTo().window(). Следующий код демонстрирует, как мы можем переключиться на новую вкладку, а затем закрыть ее:

WebDriver driver;
System.setProperty("Webdriver.chrome.driver", "chromedriver.exe");
driver = new ChromeDriver();
driver.get("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open");

driver.switchTo().frame("iframeResult");
driver.findElement(By.xpath("//button[contains(text(),'Try it')]")).click();
try {
    Thread.sleep(4000);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Set<String> handles = driver.getWindowHandles();

if (handles.size() == 2) {
    Iterator<String> itr = handles.iterator(); 

    String parent_window = itr.next().toString();
    String child_window = itr.next().toString();
    System.out.println(parent_window);
    System.out.println(child_window);

    // switching to child window
    driver.switchTo().window(child_window);

    // closing child window
    driver.close();

    // switching back to parent window
    driver.switchTo().window(parent_window);

} else {
    System.out.println("New tab did not open.");
}

Дайте мне знать, если у вас возникнут дополнительные вопросы.

person Mahipal    schedule 03.08.2018

Вам нужно позаботиться о нескольких моментах следующим образом:

  • В строке System.setProperty() Ключ равен webdriver.chrome.driver.
  • В строке System.setProperty() Value должен быть абсолютным путем к варианту WebDriver, т. е. к chromedriver.exe
  • Чтобы switch() перейти на новую вкладку, необходимо вызвать WebDriverWait с параметром ExpectedConditions, установленным как numberOfWindowsToBe().
  • Вот ваш собственный код с некоторыми простыми изменениями:

    WebDriver driver;
    System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.get("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open");
    String parent_window = driver.getWindowHandle();
    driver.switchTo().frame("iframeResult");
    driver.findElement(By.xpath("//button[contains(text(),'Try it')]")).click();
    new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));
    Set<String> windows = driver.getWindowHandles();
    for(String child_window:windows)
        if(!parent_window.equals(child_window))
        {
            driver.switchTo().window(child_window);
            System.out.println(child_window);
        }
    
person DebanjanB    schedule 03.08.2018