Selenium(Java) - 如何点击链接,然后测试窗口是否打开?

时间:2013-12-05 16:51:39

标签: testing selenium-webdriver cucumber

我已经完成了一个项目,其中我显示了一个名称列表及其相应的超链接,每个超链接文本都不同,所以它看起来像这样,

  • 名称1(http://somesite.com/name1
  • 名称2(http://somesite.com/name2
  • 名称3(http://somesite.com/name3
  • 名称4(http://somesite.com/name4
  • 使用以下代码行,我可以获得所需的元素

    arg1 = "http://somesite.com/name3"
    WebElement urlElement = driver.findElement("//a[contains(text(), '" + arg1 + "')]");
    

    有了这个,我确实得到了urlElement。现在当我点击urlElement时,

    urlElement.click();
    

    我期待它打开窗口,以便稍后链接,我可以打电话,

    driver.switchTo().window("opened window title")
    

    我期待这个工作,但由于某种原因它没有说明这些不是那个标题的窗口。

    3 个答案:

    答案 0 :(得分:1)

    urlElement.click();   
    Set<String> winids = driver.getWindowHandles();  
    System.out.println("Total number of windows/tabs are:" +winids.size());  
    String mainWindow = winids.iterator().next();  
    String childWindow = winids.iterator().next();  
    System.out.println(mainWindow);   
    System.out.println(childWindow);        
    driver.switchTo().window(childWindow);
    

    我希望这对你有用..

    它只是在窗口之间切换。你想测试得到窗口的标题,并与预期的窗口标题进行比较

    答案 1 :(得分:0)

    Use `driver.getWindowHandles()`to get the list of handles and save them in a 
    

    列表,使用driver.getWindowHandle()检查当前句柄,然后使用driver.switchTo().window("other window")导航到新句柄。 如果您想关闭旧窗口,可以在切换前使用driver.close()

    答案 2 :(得分:0)

    更好的方法是对bool条件的多个切换窗口实例使用相同的方法。这是C#代码,但对任何具有Java知识的人都应该是可读的。

      

    将对象驱动程序的焦点切换到第一个可用的焦点   窗口不等于当前窗口@param closeOldWindow -   如果为真,则关闭上一个窗口

    protected  void switchWindows( bool closeOldWindow)
    {
    
         String currentWindow = Driver.CurrentWindowHandle;
    
        // switch to first window that is not equal to the current window
        IReadOnlyCollection<String> handles =Driver.WindowHandles;
        String newWindow = handles.FirstOrDefault(handle => currentWindow != handle);
    
        // if there's another window found...
        if (newWindow != null) {
            if (closeOldWindow) {
                // close the current window
                Driver.Close();
            }
            // ...switch to the new window
            Driver.SwitchTo().Window(newWindow);
        }
    }