【问题标题】:Selenium is unable to find element in a Modal window with iframesSelenium 无法在带有 iframe 的模态窗口中找到元素
【发布时间】:2015-08-29 06:29:36
【问题描述】:

我有一个页面,我在其中单击一个链接,该链接会打开一个具有 iframe 的新模态窗口。我切换到 iframe 并执行了一些验证,然后单击该模态窗口中的链接,该链接又打开带有 iframe 的第二个新模态窗口。我在单击第二个新模态窗口中的任何元素时遇到问题。

这是我的代码。

WebElement Hotelname = driver.findElement(By.cssSelector(".hotelTitleZone2>a"));
Hotelname.click(); \\This will open a new Pop up.

driver.switchTo().frame(1);
\\perform some validation
String parentHandle = driver.getWindowHandle();
driver.findElement(By.linkText("View on a Map")).click(); \\This will open second pop up Modal window

for (String winHandle : driver.getWindowHandles()) {
    driver.switchTo().window(winHandle); 
}
driver.switchTo().defaultContent();
driver.switchTo().frame(1); \\switching to frame
driver.findElement(By.linkText("Close")).click();

当我运行此代码时,我收到错误:

org.openqa.selenium.NoSuchElementException:无法定位元素: {“方法”:“链接文本”,“选择器”:“关闭”}

我尝试过切换到默认内容或不切换到默认内容,没有切换到第二个模态窗口中的框架,但结果始终相同。

任何帮助表示赞赏?谢谢。

【问题讨论】:

  • 如果您的问题得到解决,请将其标记为已回答,这也将有助于 Stackoverflow 社区。​​span>

标签: java iframe selenium-webdriver


【解决方案1】:

我的理解是:

  1. 从默认窗口开始
  2. 点击打开第一个具有 iframe 的模态窗口
  3. 切换到这个新的 iframe(索引 = 1)
  4. 获取当前窗口句柄的ID,即默认窗口句柄
  5. 单击以打开具有第二个 iframe 的第二个模态窗口
  6. 切换到第二个模态窗口
  7. 切换回默认窗口
  8. 切换到 iframe(索引 = 1)
  9. 找到您想要的按钮

这里有一些混淆:

  • 在上面的第 4 步中,您使用了 String parentHandle = driver.getWindowHandle();存储原始默认窗口句柄但您从未使用过它,而是使用 driver.switchTo().defaultContent();
  • 单击第一个模态窗口后发生了什么?关了吗?如果它没有关闭,它的 iframe 仍然是 iframe (index=1),这可以解释为什么您无法从 iframe (index=1) 中找到您的按钮;因为您的按钮将驻留在属于第二个模态窗口的 iframe 上,这可能是 iframe (index=2)。您可以使用 driver.switchTo().frame(2); 来解决它。可以肯定的是,您可以检查 HTML 元素以查看存在多少 iframe 以及它们属于哪些模态窗口。

希望你会发现它有用。

【讨论】:

  • 是的,我之前写过代码 String parentHandle = driver.getWindowHandle() 但没有使用。如果没有该代码,结果也是一样的。第一个模态窗口保留在后台。添加 driver.switchTo().activeElement();从 iframe 导航后成功了。现在工作正常。感谢您的帮助。
  • 如果这个答案解决了您的问题,请标记为答案,以奖励张宇的工作,并将问题标记为已回答。谢谢!
猜你喜欢
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多