如何在硒窗口之间切换?

时间:2018-07-05 11:26:38

标签: selenium internet-explorer selenium-webdriver webdriver iedriverserver

我正在开发仅适用于IE的应用程序。登录应用程序后,将打开一个新的新窗口,即主页。现在我的问题是我无法通过IE驱动程序找到主页中的任何元素。 不确定浏览器是否在上一个窗口中查找元素。

我的方法:

System.DirectoryServices.PropertyValueCollection

3 个答案:

答案 0 :(得分:0)

我也遇到了类似的问题,无法获取定位器,但是定位器确实存在。在这里,我提出了可行的解决方案,只需尝试使用JavaScript定位Web元素。

获取定位器的替代方法,如果driver.findElement无法正常工作,请使用以下Java脚本

public WebElement getIsConvertedCheckBoxElement() {
JavascriptExecutor js = getDriver();
String script = "return document.getElementById('conversion');";
return (WebElement) js.executeScript(script);
}

答案 1 :(得分:0)

正如@JimEvans在评论中提到的那样,

  

尽管用于存储句柄列表的数据类型可以通过插入进行排序,但是WebDriver实现在窗口句柄上迭代以插入它们的顺序并不需要保持稳定。顺序是任意的。

因此,每次打开新标签页/窗口并最终遍历 window句柄时,我们必须诱使 WebDriverWait 然后收集 window句柄 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
    

答案 2 :(得分:-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();