【问题标题】:No Frame found in Selenium c#在 Selenium c# 中找不到框架
【发布时间】:2017-12-14 06:23:00
【问题描述】:

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

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

然后我尝试了以下操作,但仍然出现 NO frame found 错误。

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

【问题讨论】:

  • 你可以试试driver.switchTo.Frame("contentIFrame0")
  • @NarendraR 是的.. 我也试过了.. 和它的抛出 NosuchFrameException 一样
  • 可以分享网站网址
  • 它只会在客户端机器内打开
  • 我猜在您切换第一个窗口然后切换框架时出现了一些故障。是打开 2 个窗口吗?并且您正在第二个窗口中切换并在第二个窗口中切换 iframe ?

标签: c# selenium iframe selenium-webdriver webdriver


【解决方案1】:

让我们分析一下您的代码中发生了什么:

  • 代码尝试 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")))
    

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

  • 代码尝试 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 不清楚。

【讨论】:

  • 我使用以下代码 driver.SwitchTo().ParentFrame();driver.SwitchTo().defaultContent();driver.findelements(by.tagname("iframe")) 。现在我得到了 32 位的唯一帧 ID。
  • 是否可以通过使用此框架 id 来获取框架内的元素?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多