在Selenium中找不到框架c#

时间:2017-12-14 06:23:00

标签: c# selenium iframe selenium-webdriver webdriver

我使用以下代码在网页中查找iframe

string win = diver.CurrentWindowHandle;
driver.switchTo().Window(win);
driver.switchTO().defautContent();

然后我尝试了以下的事情,但仍然发现NO帧发现错误。

driver.switchTo().Frame(1); (or)
driver.switchTo().Frame(0);
driver.switchTo().Frame(driver.findelement(by.id(By.xpath("//xpath of d frame")))
driver.switchTo().Frame(driver.findelement(by.id(By.tagname(iframe)))
driver.switchTo().Frame(driver.findelement(by.id(By.className(classnamehere)))

Please click here to view the HTML structure

1 个答案:

答案 0 :(得分:0)

让我们分析一下代码中发生的事情:

  • 代码尝试1:

    string win = diver.CurrentWindowHandle;
    driver.switchTo().Window(win);
    

    所有框架仍然附加到相同的 windowHandle 。所以driver.switchTo().Window(win);不是一个选择。

  • 代码尝试2:

    driver.switchTo().Frame(1);
    driver.switchTo().Frame(0);
    

    由于我们不确定frames的加载顺序,尝试通过 index 切换帧可能无法帮助我们。

  • 代码尝试3:

    driver.switchTo().Frame(driver.findelement(by.id(By.xpath("//xpath of d frame")))
    

    如果我们提供了xpath的有效且唯一的 frame ,这应该有效。

  • 代码尝试4:

    driver.switchTo().Frame(driver.findelement(by.id(By.tagname(iframe)))
    

    这将尝试切换到第一个可用的iframe,它可能不是预期的或可见的。因此失败

  • 代码尝试5:

    driver.switchTo().Frame("contentIFrame0");
    

    visibility 属性设置为 hidden

  • 代码尝试6:

    driver.switchTo().Frame("contentIFrame1");
    

    此选项必须有效,但您与HTML分享的WebElements不明确。