0

我正在开发一个仅适用于 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();
}
4

3 回答 3

0

正如@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
    
于 2018-07-05T14:29:22.147 回答
0

我也遇到过类似的问题,无法获取定位器,但定位器确实存在。在这里我建议工作解决方案,只需尝试使用 JavaScript 定位 Web 元素。

获取定位器的替代方法,如果 driver.findElement 不起作用,请使用以下 java 脚本

public WebElement getIsConvertedCheckBoxElement() {
JavascriptExecutor js = getDriver();
String script = "return document.getElementById('conversion');";
return (WebElement) js.executeScript(script);
}
于 2018-07-05T12:19:04.847 回答
-1
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();
于 2018-07-05T11:45:41.850 回答