我正在尝试点击'结束游览'链接,以便关闭一个动态弹出窗口,如附带的屏幕截图所示。我的目标是完全摆脱弹出窗口,因为它阻止我在测试期间移过屏幕。
我尝试使用def readit(filename)
text = ""
begin
text = File.open(filename, &:readline)
rescue EOFError
end
text
end
,cssSelector
和xpath
,但似乎都没有效果。请参阅下面显示的检查弹出元素的HTML bello和浏览器控制台:
linkText
答案 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后,您可以通过以下方式找到“结束游览”链接:
By lnkEndTour = By.linkText("End Tour");
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。