【问题标题】:Does find element in selenium checkes if the tag is closed proeprly?如果标签正确关闭,是否检查硒中的元素?
【发布时间】:2015-05-12 20:53:19
【问题描述】:

我正在使用 selenium 方法查找元素来检查标签是否存在。例如-

driver.findElements(By.xpath("//meta[@name='keywords']");

我不确定如果标签没有正确打开或关闭,Selenium 是否仍会在网页上找到该元素?

【问题讨论】:

  • 这实际上与selenium 无关。一般来说,浏览器在使 HTML 格式良好方面做得很好。

标签: java selenium selenium-webdriver webdriver


【解决方案1】:

如果您的目标是验证页面的 HTML,您可以使用 W3C 标记验证服务。它是一个基于 SOAP 的服务。只需添加对您的项目的引用并构建请求作为文档中的示例-https://validator.w3.org/docs/api.html 如果要手动检查,只需在此处粘贴所需的 URL:https://validator.w3.org/

【讨论】:

  • 谢谢安东!被要求使用 WebDriver。
  • @ForTesting 您可以轻松地将其作为 webdriver 测试的一部分进行;您使用 webdriver 导航到正确的页面,然后提取页面源,将其提交给 W3C 标记验证 API 并检查结果。这比编写自己的代码来验证页面源要好得多
  • 我完全同意上面的说法,这也是我的想法,如果我不够清楚,请见谅。
【解决方案2】:

Selenium only 在浏览器提供的 DOM 之上运行元素选择器。通常,浏览器会在几乎所有 HTML 之上创建 DOM(元素树)——它是为处理此类情况而有意构建的,例如未闭合的对元素、格式错误的 HTML 等。但每个浏览器的行为可能会有所不同。

所以答案很简单。 Selenium 不会对此进行检查,它很可能会找到该元素,因为浏览器(为 Selenium 提供数据)具有如何解析 HTML 甚至缺少关闭元素的启发式方法。因此,从 Selenium 的角度来看,它可能看起来像完全“有效”且没有问题的 HTML。

要检查 HTML 的有效性,我建议使用不同的工具,例如 W3 validatorHTML tidy 项目。

【讨论】:

    【解决方案3】:

    简而言之:可能,但不能保证。取决于浏览器。

    长篇大论:selenium 的findElements 方法和此类链接实际上并不检查 html - 它们检查浏览器的 DOM。现在浏览器非常擅长找出结构不佳的 html(缺少结束标记等),因此它有可能找出标记的问题并将其包含在 DOM 中。如果是这样,那么 selenium 会找到它(在 DOM 中);但是如果浏览器无法识别标签想要表达的内容并且没有包含它,那么 selenium 将找不到它。

    【讨论】:

    • 所以基本上我不能完全依赖 Selenium 来确保 Tag 构造正确。我需要相应地对其进行编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多