4

对于我们页面上的一些网络链接,有一些外部链接可以引导用户使用 Facebook 和 Twitter。这些链接使用 HMTL 标记target="_blank",以便为我们的 Twitter 页面打开一个新的浏览器选项卡。

我想验证 1. 新的浏览器选项卡是否打开,2. 将焦点设置在它上面,以及 3. 验证新浏览器选项卡中的页面元素。一旦我专注于它,#3 部分就很容易了。任务 #1 和 #2 虽然我不知道,也找不到任何人在谈论这个。

使用 Selenium2Library (WebDriver)

4

5 回答 5

3

Selenium 不支持选项卡(截至 2013 年 6 月,Selenium 2.33.0)并且总是打开新窗口。如果您的测试打开一个新选项卡,祝您好运。

也就是说,如果它正确打开一个新窗口,请使用Select Window.

Select Window | url=https://twitter.com/expectedPage

我在Java中工作的 WebDriver (2.33.0) 代码,希望它会有所帮助。您描述的问题是我的机器人知识开始下降的地方。

@Test
public void targetBlankLinkTest() {
    // load the website and make sure only one window is opened
    driver.get(file("TargetBlankLinkTest.html"));
    assertEquals(1, driver.getWindowHandles().size());

    // click the link and assert that a new window has been opened      
    driver.findElement(By.linkText("Follow us on Twitter!")).click();
    Set<String> windowHandles = driver.getWindowHandles();
    assertEquals(2, windowHandles.size());

    // switch to the new window and do whatever you like
    // (Java doesn't have Switch Window functionality that can select by URL.
    // I could write it, but have been using this trick instead)
    for (String handle : windowHandles) {
        if (handle != driver.getWindowHandle()) {
            driver.switchTo().window(handle);
        }
    }
    assertThat(driver.getCurrentUrl(), containsString("twitter.com"));
}
于 2013-06-21T10:40:13.510 回答
1

如果您想验证是否打开了新选项卡,那么您可以在单击打开新选项卡的链接/元素之前和之后比较窗口句柄。只需遵循此代码可能会对您有所帮助。

这里 ${LINKDIN} 是在新标签页中打开的元素。因此,在单击它之前将窗口句柄保存在变量中,并在再次单击元素后将窗口句柄保存在变量中。现在,如果打开了一个新选项卡,那么两个变量值将不同,如果没有打开新选项卡,则两个变量值相同。通过这种方式,您可以验证新 wtab 打开。

 Go Back
 ${Current_window}        List Windows
 Click Element            ${LINKDIN}
 ${New_Windows_list}      List Windows
 Should Not Be Equal      ${Current_window}    ${New_Windows_list}
于 2017-05-21T13:23:04.227 回答
1

使用 Robot Selenium2Library 关键字:

@{windows} =  List Windows
${numWindows} =  Get Length  ${windows}
${indexLast} =  Evaluate  ${numWindows}-1
Should Be True  ${numWindows} > 1
Select Window  @{windows}[${indexLast}]
Location Should Contain  /my/url/whatever
Title Should Be   myTitle
Page Should Contain   ...

你明白了。

于 2018-02-08T17:03:28.220 回答
0

我建议:

1. First, acquire new window handle by using the switchTo() method.
2. Then bring that window into focus using a JavaScriptExecutor:
   ((JavascriptExecutor) myTestDriver).executeScript("window.focus();");
   Using switchTo() without a javascript executor to get focus , is not 
   very reliable in my opinion.
3.  Next, do what you need to do in that window.
4. Use driver.close() to close that window.
5.  Verify you are back at the parent window with focus.
于 2013-06-24T20:45:55.083 回答
0

您可以使用以下代码将焦点设置在新窗口上:

单击元素 ${a_link_which_opensin_newtab} 选择窗口新建

现在您可以在新标签上执行您的操作。如果您想切换回主选项卡,请使用

选择窗口主

于 2018-07-19T02:14:15.640 回答