Selenium无法在带有iframe的模态窗口中找到元素

时间:2015-08-29 06:29:36

标签: java iframe selenium-webdriver

我有一个页面,我在其中点击一个链接,该链接打开一个新的模态窗口,其中包含一个iframe。我切换到iframe并执行了一些验证,然后单击该Modal窗口中的链接,该窗口依次打开带有iframe的第二个新Modal窗口。我正面临着点击第二个新模态窗口中的任何元素的问题。

这是我的代码。

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:无法找到元素:   {“method”:“link text”,“selector”:“Close”}

我尝试使用或不使用切换到默认内容,而不在第二个模态窗口中切换到帧,但结果始终相同。

感谢任何帮助?感谢。

1 个答案:

答案 0 :(得分:1)

我的理解是:

  1. 从默认窗口
  2. 开始
  3. 点击打开第一个包含iframe的模态窗口
  4. 切换到这个新的iframe(index = 1)
  5. 获取当前窗口句柄的ID,这是默认窗口句柄
  6. 单击以打开具有第二个iframe
  7. 的第二个“模态”窗口
  8. 切换到第二个模态窗口
  9. 切换回默认窗口
  10. 切换到iframe(index = 1)
  11. 找到您之后的按钮
  12. 这里有一些混淆:

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

    希望你会发现它很有用。