Как переключаться между окнами в селене? - PullRequest
0 голосов
/ 05 июля 2018

Я работаю над приложением, которое требуется только для IE. После входа в приложение открывается новое новое окно, которое является домашней страницей. Теперь моя проблема в том, что я не могу найти какой-либо элемент на домашней странице через драйвер IE. Не уверен, что браузер ищет элемент в предыдущем окне.

Мой метод:

public void awb_enquiry() throws Exception {

    String handles= driver.getWindowHandle();
    System.out.println(handles);
    driver.switchTo().window(handles);
    driver.findElement(By.xpath("//*[text()='Select']")).click();
}

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

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

Альтернативный способ получения локатора, если driver.findElement не работает, используйте приведенный ниже java-скрипт

public WebElement getIsConvertedCheckBoxElement() {
JavascriptExecutor js = getDriver();
String script = "return document.getElementById('conversion');";
return (WebElement) js.executeScript(script);
}
0 голосов
/ 05 июля 2018

Как отметил @JimEvans в своих комментариях, следует отметить, что

Хотя тип данных, используемый для хранения списка дескрипторов, может быть упорядочен путем вставки, порядок, в котором реализация WebDriver выполняет итерацию по дескрипторам окна для их вставки, не требует стабильности. Порядок произвольный.

Итак, нам нужно вызвать WebDriverWait и затем собирать дескрипторы окна каждый раз, когда мы открываем новую вкладку / окно и, наконец, перебираем дескрипторы окна и switchTo().window(newly_opened) согласно следующему примеру:

  • Пример кода:

    System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe");
    WebDriver driver =  new InternetExplorerDriver();
    driver.get("http://www.google.com");
    String first_tab = driver.getWindowHandle();
    System.out.println("Working on Google");
    ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
    WebDriverWait wait = new WebDriverWait(driver,5);
    wait.until(ExpectedConditions.numberOfWindowsToBe(2));
    Set<String> s1 = driver.getWindowHandles();
    Iterator<String> i1 = s1.iterator();
    while(i1.hasNext())
    {
        String next_tab = i1.next();
        if (!first_tab.equalsIgnoreCase(next_tab))
        {
        driver.switchTo().window(next_tab);
    
        System.out.println("Working on Facebook");
        }
    }
    
  • Выход на консоль:

    Working on Google
    Working on Facebook
    
0 голосов
/ 05 июля 2018
String beforeLogin = driver.getWindowHandle();
/*
*  Perform Login
*/ 
ArrayList<String> windows = new ArrayList<String>(driver.getWindowHandles()); 
// Now switch to 2nd window 
driver.switchTo.window(windows.get(1)); 
driver.findElement(By.xpath("//*[text()='Select']")).click();
...