标题已修改:是“Selenium:如何检查新标签中是否打开了链接?”
我需要创建JUnit测试,该测试应检查点击按钮是否会导致在新选项卡中打开一些链接。 这样做我遇到了问题:看起来像.click()不会做它想象的那样。 这是HTML的片段:
<div class="small-5 column store-btns">
<a class="google_play_btn" target="_blank" href="https://google.com">
<img class="img-responsive"src="/s/img/buy/google_play_btn_blue.svg" alt>
</a>
<a class="app_store_btn" target="_blank" href="https://apple.com/">
<img class="img-responsive"src="/s/img/buy/app_store_btn_blue.svg" alt>
</a>
</div>
已编辑:以下是我的简单JUnit测试:
@Before
public void SetUp(){
driver = new SafariDriver();
pause = new WebDriverWait(driver, 2000);
}
@After
public void tearDown(){
driver.close();
driver.quit();
}
@Test:
public void testLink() throws InterruptedException{
driver.get("http://linktotestedpage");
WebElement googlePlayButton = pause.until(ExpectedConditions.visibilityOfElementLocated(By.className("google_play_btn")));
googlePlayButton.click();
List<String> browserTabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(browserTabs.get(1));
String titleGP = driver.getTitle();
Assert.assertTrue("Failure: link is ok", titleGP.equals("Google"));
我希望在googlePlayButton.click();
之后打开一个新的Safari选项卡,但驱动程序才会退出。
我明白了
IndexOutOfBoundsException: Index 1, Size 1
我哪里错了? 感谢。
答案 0 :(得分:1)
我会添加一个额外的检查,因为windowsHandle
显式无序,并且无法保证最后一个标签是索引为1
String currentHandle = driver.getWindowHandle();
List<String> browserTabs = new ArrayList<String>(driver.getWindowHandles());
for (String handle: browserTabs){
if (handle != currentHandle){
driver.switchTo().window(handle);
//perform addition action as needed;
//when done close the window
driver.close();
driver.switchTo().window(currentHandle);
}
}
String titleGP = driver.getTitle();
注意:我身边未经测试的代码
答案 1 :(得分:0)
只有一个建议, 您可以删除代码中的tearDown部分。 保持浏览器打开状态,检查标签是否有任何延迟打开。 我怀疑的是,你可能在打开之前试图切换到窗口。
注意:应该是评论但尚未获得该声誉。