Selenium:为什么.click()在这种情况下不起作用&&如何检查按钮是否被点击?

时间:2015-04-28 23:50:06

标签: java junit selenium-webdriver safari

标题已修改:是“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

我哪里错了? 感谢。

2 个答案:

答案 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部分。 保持浏览器打开状态,检查标签是否有任何延迟打开。 我怀疑的是,你可能在打开之前试图切换到窗口。

注意:应该是评论但尚未获得该声誉。