硒:硒如何识别可见或不可见的元素?有没有可能在DOM中加载,但没有在UI上呈现?

Selenium: How selenium identifies elements visible or not? Is is possible that it is loaded in DOM but not rendered on UI?

提问人:Sunil 提问时间:2/26/2018 最后编辑:undetected SeleniumSunil 更新时间:11/2/2023 访问量:10089

问:

  1. 硒:硒如何识别可见或不可见的元素?有没有可能在DOM中加载,但没有在UI上呈现? 我想验证元素可点击的场景,我知道网络驱动器有方法“ElementToBeClickable”但是,我想知道内部工作原理。请帮我解决这个问题。
  2. 另外,如何处理元素在DOM中加载但UI显示正在加载的情况,如何等待完成加载?
  3. 请让我知道,如果 UI 未加载,那么 selenium 会直接调用 DOM 元素还是正在加载 UI 元素,那么它会失败执行?我真的很感激对此有更多的技术解释。
selenium selenium-webdriver dom webdriverwait expected-condition

评论


答:

4赞 undetected Selenium 2/26/2018 #1
  • Selenium 可以在元素在 HTML DOM存在可见时立即识别它们的存在可见性。从用户的角度来看,您可以在 WebElement 上调用 isDisplayed() 方法来检查是否显示了预期的 WebElement。根据当前的实现,Selenium可能无法区分加载的元素和渲染的元素。ExpectedConditions 类中的 ElementToBeClickable 方法设置检查元素是否可见启用的期望值,以便您可以单击它。

  • 元素在 DOM 中加载但 UI 显示正在加载时,您仍必须等待 JavaScriptAJAX 调用完成加载页面,以便页面上的所有 WebElements 都变得可交互。最多要等待完全加载,您可以将 设置为正常,但可能仍必须诱导 WebDriverWait 才能使预期的 WebElement 出现可见、可交互可单击pageLoadStrategy

在这里,您可以找到有关页面加载策略的详细讨论

  • 如果未加载 UI,Selenium 可能无法与一些 DOM 元素交互。

更新

根据您的反问,以下是 WebElement 的不同阶段以及用于检查阶段的相应 ExpectedConditions

  • 元素的存在

     presenceOfElementLocated(By locator)
     An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible.
    
  • 元素的可见性

     visibilityOf(WebElement element)
     An expectation for checking that an element, known to be present on the DOM of a page, is visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0.
    
  • 可点击的元素

     elementToBeClickable(By locator)
     An expectation for checking an element is visible and enabled such that you can click it.
    

注意:根据文档,元素是可单击的 - 它是显示和启用的。

评论

0赞 Sunil 2/26/2018
感谢您的快速回复,请允许我提出关于 ElementToBeClickable 的后续查询,我已经浏览了官方文档,并对“检查元素的期望可见并启用,以便您可以单击它”这句话感到困惑。 这是否意味着它只会在 UI 上可见时点击,或者它再次与 DOM 有关, 我知道字面意思,但仍然想确定一下。请帮忙
0赞 Sunil 2/27/2018
谢谢。请耐心等待,并允许我提出后续查询,1)对于元素的可见性和元素的可点击性,两者都与DOM部分相关,当它说“显示元素但高度和宽度也大于0”时,这是否意味着它正在检查UI元素是否实际显示或根据下载的css确定该元素已显示。我试图确保的唯一一点是 2.)有没有办法断言该元素实际显示在网页上,或者仅基于 DOM 和加载的 css,html selenium 正在执行操作?
0赞 undetected Selenium 2/27/2018
presence,并且都与 HTML DOMWebElement 的不同状态有关。各州是不同的。根据要求使用适当的 ExpectedConditionsvisibility(displayed)interactability(clickability)
1赞 Sunil 3/1/2018
非常感谢您的澄清