无法单击链接以摆脱巡回弹出窗口

时间:2017-05-20 20:24:59

标签: java selenium testing selenium-webdriver webdriver

我正在尝试点击'结束游览'链接,以便关闭一个动态弹出窗口,如附带的屏幕截图所示。我的目标是完全摆脱弹出窗口,因为它阻止我在测试期间移过屏幕。

我尝试使用def readit(filename) text = "" begin text = File.open(filename, &:readline) rescue EOFError end text end cssSelectorxpath,但似乎都没有效果。请参阅下面显示的检查弹出元素的HTML bello和浏览器控制台:

enter image description here

linkText

4 个答案:

答案 0 :(得分:4)

是的,我看到了您的问题,您可能正在使用正确的选择器,但您尝试查找的元素显然位于iframe中(请参阅控制台中的关闭</iframe>标记)。所以基本上你的弹出窗口是在另一个窗口中打开的,并通过iframe显示在你当前的TAB中。

由于缺少.switchTo()代码属性,您需要id="carlsonIframe"您的驱动程序上下文,以及您的iframe(由于缺少<iframe>标记属性,我将视为// We have to switch to the popup: driver.switchTo().frame("carlsonIframe"); // And now click the 'End Tour' button: driver.findElement(By.css("div.popover-navigation a:contains('End Tour')")).click(); // or: driver.findElement(By.css("div.popover-navigation a:nth-of-type(3)")).click(); // Finally, go back to your original context: driver.switchTo().defaultContent(); )。应该看起来像这样:

latitude

如果这对您有用,请告诉我。干杯!

答案 1 :(得分:0)

这不是最好的方法,但你可以使用该代码跳过我的弹出窗口。

try{
    Thread.sleep(2000);
    driver.findElement(By.xpath("//div[@class='popover-navigation']/a[@data-role='end']")).click();
}catch (NoSuchElementException ignore) {
    logger.info("walk me popup didn't seen")
}

答案 2 :(得分:0)

每当文档对象模型(DOM)/ HTML源中有<iframe>时,您必须先使用driver.switchTo().frame("NAME_OR_ID_OF_THE_IFRAME");

切换到它

在你的情况下,

// Switch to the iframe
driver.switchTo().frame("kdsiframe");

// Locate the element by link Text
driver.findElement(By.linkText("End Tour")).click();

// Switch back to default content
driver.switchTo().defaultContent();

切换到iframe后,您可以通过以下方式找到“结束游览”链接:

  1. 链接文字:
  2. By lnkEndTour = By.linkText("End Tour");
    1. XPATH:
    2. By xpEndTour = By.xpath("//*[@id='index-page']//*[contains(@id,'step')]//a[@data-role='end' and contains(text(),'End Tour')]");

答案 3 :(得分:0)

可能是您尝试在加载前访问框架元素。所以等待框架加载并找到元素并执行操作。

您可以使用下面给出的显式等待。

WebDriverWait wait=new WebDriverWait(driver, 90);        wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frameID"));
driver.findElement(By.cssSelector(".popover-navigation>a[data-role='end']")).click();

在此处更改frameID。