如何在Selenium WebDriver中验证新标签页是否已打开?

15
我有一个情况,需要检查点击链接后是否打开了新的标签页。如果打开了,我还想检查标题。

有谁对此有什么想法吗?

5个回答

22

这里是针对C#的相同代码;经过测试,无论链接是在新标签页还是新窗口打开都可以正常工作。

var browserTabs = driver.WindowHandles;            
driver.SwitchTo().Window(browserTabs[1]);

//check is it correct page opened or not (e.g. check page's title or url, etc.)
// ...
//close tab and get back
driver.Close();
driver.SwitchTo().Window(browserTabs[0]);
希望这能帮助到遇到这个问题的任何人。

10

尝试切换到一个新的选项卡,然后验证是否是正确的页面。

在Java中,它可能会像这样:

//get window handlers as list
List<String> browserTabs = new ArrayList<String> (driver.getWindowHandles());
//switch to new tab
driver.switchTo().window(browserTabs .get(1));
//check is it correct page opened or not (e.g. check page's title)
//...
//then close tab and get back
driver.close();
driver.switchTo().window(browserTabs.get(0))

谢谢您的解决方案,但对我没有用。即使等待了一分钟,它仍然会给出browsertab.size = 1。 - OPTIMUS
我的错误。我在没有测试的情况下发布了代码。 请尝试第二个答案(由Jordan Silva提供):https://dev59.com/cGcs5IYBdhLWcg3wlFA2 这对我有效。 - Andrii
谢谢您的解决方案,我会尝试并让您知道是否有任何问题。 - OPTIMUS

3

您可以使用以下方法实现等待直到标签完全加载。

  public static void switchTabs(WebDriver driver, int expectedWindowsCount,int SwitchtoWindow) throws Exception {
    (new WebDriverWait(driver, 30)).until(ExpectedConditions.numberOfWindowsToBe(expectedWindowsCount));
    ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
    driver.switchTo().window(tabs2.get(SwitchtoWindow));
}

该方法将检查可用的活动窗口处理程序数量,并等待所需处理程序出现并在此之后切换到选项卡。

0

如果你正在使用Groovy进行测试自动化,这会对你有所帮助。

def browserTabs = driver.getWindowHandles()
driver.switchTo().window(browserTabs[1])
assert //Validate your new page title//

0
使用“等待打开的标签数”来确保新标签页已经打开。
(new WebDriverWait(driver, 30)).until(ExpectedConditions.numberOfWindowsToBe(2));

然后切换到新标签页

protected void switchTabsUsingPartOfUrl(String platform) {
    String currentHandle = null;
    try {
        final Set<String> handles = driver.getWindowHandles();
        if (handles.size() > 1) {
            currentHandle = driver.getWindowHandle();
        }
        if (currentHandle != null) {
            for (final String handle : handles) {
                driver.switchTo().window(handle);
                if (currentUrl().contains(platform) && !currentHandle.equals(handle)) {
                    break;
                }
            }
        } else {
            for (final String handle : handles) {
                driver.switchTo().window(handle);
                if (currentUrl().contains(platform)) {
                    break;
                }
            }
        }
    } catch (Exception e) {
        System.out.println("Switching tabs failed");
    }
}

调用此方法并传递要切换到的选项卡 URL 的子字符串参数。
driver.getTitle().equals("Title");

然后验证页面标题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接