Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium Robot Framework验证是否打开了新的浏览器选项卡_Selenium_Selenium Webdriver_Robotframework - Fatal编程技术网

Selenium Robot Framework验证是否打开了新的浏览器选项卡

Selenium Robot Framework验证是否打开了新的浏览器选项卡,selenium,selenium-webdriver,robotframework,Selenium,Selenium Webdriver,Robotframework,对于我们页面上的一些web链接,有一些外部链接可以引导用户说Facebook和Twitter。这些链接使用HMTL标记target=“\u blank”,以便为我们的Twitter页面打开一个新的浏览器选项卡 我想核实一下。新浏览器选项卡已打开,2。将焦点设置为它和3。验证“新建浏览器”选项卡中的页面元素。一旦我集中精力,第三部分就足够简单了。任务1和任务2,但我不明白,也找不到任何人谈论这件事 使用Selenium2Library(WebDriver)Selenium不支持选项卡(截至2013

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

我想核实一下。新浏览器选项卡已打开,2。将焦点设置为它和3。验证“新建浏览器”选项卡中的页面元素。一旦我集中精力,第三部分就足够简单了。任务1和任务2,但我不明白,也找不到任何人谈论这件事


使用Selenium2Library(WebDriver)

Selenium不支持选项卡(截至2013年6月,Selenium2.33.0),而是始终打开新窗口。如果你的测试打开了一个新标签,祝你好运

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


我正在使用的WebDriver(2.33.0)代码,希望它能有所帮助。你所描述的问题是我的机器人知识开始下降的地方

@测试
public void targetBlankLinkTest(){
//加载网站并确保只打开一个窗口
get(文件(“TargetBlankLinkTest.html”);
assertEquals(1,driver.getWindowHandles().size());
//单击链接并断言新窗口已打开
driver.findElement(By.linkText(“在Twitter上关注我们!”)。单击();
设置windowHandles=driver.getWindowHandles();
assertEquals(2,windowHandles.size());
//切换到新窗口,做任何你喜欢的事情
//(Java没有可以通过URL选择的切换窗口功能。
//我可以写,但我一直在使用这个技巧)
for(字符串句柄:windowHandles){
if(handle!=driver.getWindowHandle()){
driver.switchTo().窗口(手柄);
}
}
断言(driver.getCurrentUrl(),包含字符串(“twitter.com”);
}
我建议:

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.

如果要验证新选项卡是否已打开,则可以在单击打开新选项卡的链接/元素之前和之后比较窗口句柄。只需遵循以下代码就可以了

这里${LINKDIN}是在新选项卡中打开的元素。因此,在单击之前,将窗口句柄保存在变量中,在再次单击元素之后,将窗口句柄保存在变量中。现在,如果打开一个新的is选项卡,则两个变量值将不同;如果未打开新选项卡,则两个变量值相同。通过这种方式,您可以验证ne wtab的打开情况

 Go Back
 ${Current_window}        List Windows
 Click Element            ${LINKDIN}
 ${New_Windows_list}      List Windows
 Should Not Be Equal      ${Current_window}    ${New_Windows_list}

使用Robot Selenium2库关键字:

@{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   ...

你明白了。

你可以使用以下代码设置新窗口的焦点:

单击元素${a_link_,它将打开sin_newtab} 选择窗口新建

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


选择主窗口

谢谢,Slanec。但是,是否有任何方法至少可以验证是否打开了新的浏览器选项卡?@Dave您可以得到的最接近的方法是,在打开窗口后,它将返回一个以上的值。为此,我一直使用它的Java对应项。。。。或者只需执行
选择窗口
方法并验证其中的某些内容(
标题应为
?),如果失败,则表示尚未打开。尝试使用
选择窗口
,则无效。我们来看看
获取窗口标识符
,看看我是否能够获取这些标识符来实现它。@Dave有趣。我已经编写了适用于我的纯WebDriver代码,因此我将把它编辑到答案中,以便您可以使用等效方法模拟它。我知道你们正在使用机器人框架,但坦率地说,似乎不太可能有人会来帮忙,所以至少有东西总比没有好:(。。。
@{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   ...