【问题标题】:Element visible but not present in DOM元素可见但不存在于 DOM 中
【发布时间】:2021-04-23 16:35:28
【问题描述】:

我正在使用 Selenium 进行 HCI 测试,但 Selenium 找不到可见的元素,我很感兴趣,我搜索它并得出结论,该元素可见但不存在于 DOM 中。

我可能(很可能)弄错了,但这对我来说似乎是这样。


我有一个包含 Parcourir 元素的网站:

当我点击它时,我可以看到这个div 元素:

现在问题出在这里,窗口顶部有一个元素Bibliothèque,当我打开浏览器开发工具并检查它时,我找到了它的 id 和 XPath,element HTML 代码如下:

<a href="#media-tab-media_default--media_browser_1"
data-tabid="media_default--media_browser_1" title="Bibliothèque" class="ui-tabs-anchor"
role="presentation" tabindex="-1" id="ui-id-3">
    Bibliothèque
</a>

但是当我尝试下载 DOM 时,就像它在这个答案中所说的那样: How can I dump the entire Web DOM in its current state in Chrome?.

我在 DOM 中找不到上述元素,我有一个可以在我的浏览器中看到的元素,它在 DOM 中不存在。 这可能就是为什么 selenium 给我Exception:

原因:org.openqa.selenium.NoSuchElementException:无法定位元素://*[@id='ui-id-3']

【问题讨论】:

  • 查看是否在 iframe 内
  • 是的!就是这样,谢谢。我应该发布答案并关闭问题吗?我现在该怎么办?

标签: javascript java html selenium


【解决方案1】:

正如@PDHide 所说,问题是元素在框架内,我只是切换到框架,如下所示:

webdriver.switchTo().frame(frameId);

它奏效了。

【讨论】:

    【解决方案2】:

    由于元素在 iframe 内,您必须先切换到它:

    切换到帧的语法是

    driver.switchTo().frame(id);
    

    如果您有多个 iframe 并且没有 id,则使用特定 iframe 的任何其他属性(如 Id、class 等),像对其他元素所做的那样,唯一地找到每个 iframe

    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@class=\"class\"]")));
    

    现在记得切换到框架外再次与 iframe 外的元素交互。

      driver.switchTo().defaultContent();
    

    【讨论】:

    • 你好,语法应该是webdriver.switchTo().frame(frameId);因为它是Java。 :)
    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2018-09-30
    • 2015-09-10
    • 2013-11-09
    • 1970-01-01
    • 2022-07-15
    相关资源
    最近更新 更多