【问题标题】:What are some reasons Selenium wouldn't find an Element?Selenium 找不到元素的一些原因是什么?
【发布时间】:2022-01-10 15:48:18
【问题描述】:

我正在为一个用 JavaScript 编码并使用 Dojo 框架的基于 Web 的应用程序编写一个自动化测试。我可以使用定义明确的 XPATHS 在开发人员工具中找到我希望机器人找到的元素,但是自动化测试无法找到 XPATH 导致的文本。

我的测试代码如下所示:

if verified:
     verify_detail.set_pass()
else:
     raise AssertionError("Cannot verify detail. Text did not match expected value.")

我在 UI 上查找的文本在配置文件中没有拼写错误。

其他人有这个问题吗? XPATH 在开发者工具中有效,但在运行测试时失败。

编辑 1:

我想我已经找到了导致此问题的原因的线索。机器人必须导航到一个称为详细信息面板的面板。打开后,详细信息面板位于另一个称为电影面板的面板之上。想象一下电影标题列表,通过右键单击电影并从下拉列表中选择“详细信息”来打开详细信息面板。 所以我基本上有一堆面板,我的 XPATH 查询正在点击详细信息窗格下方的窗格,这是我真正需要查看的地方。

有其他人遇到过这个问题吗?

【问题讨论】:

  • 作为调试的第一步,打印 html(或保存到文件)并查看它。元素真的存在吗?
  • 这可能意味着某些内容是异步加载的,而 Selenium 在该内容可用之前正在寻找目标。
  • @John Gordon - 是的,我已经尝试过了。元素就在那里。

标签: javascript python xpath automated-tests


【解决方案1】:

没有太多信息可以继续,但我意识到很难为此类案例提供一个完整的示例。

这种行为最常见的原因是相关元素没有立即出现在页面上,而是必须在它出现之前进行一些 JavaScript 处理。

最常见的解决方案是使用“隐式等待”,例如:
https://selenium-python.readthedocs.io/waits.html#implicit-waits

请注意,这可能会影响其他地方的测试性能,特别是在检查是否缺少元素时,如果它经常打开的话。

显而易见的替代方案是显式等待。

分析此类情况的另一个有用工具是在浏览器中为您感兴趣的 DOM 元素设置调试器断点,以查看页面加载时元素的变化情况。

【讨论】:

  • 我尝试在测试代码中插入一个隐式等待以让面板加载,但它不起作用。我在上面添加了一些新信息。请让我知道你的想法。
  • 如果不查看实际代码、HTML 或生成的错误消息,这很难诊断。当涉及重叠元素时,它取决于交互,例如阅读文本可能有效,单击元素可能无效。目前尚不清楚“我的 XPATH 查询正在点击详细信息窗格下方的窗格,这是我真正需要查看的地方”实际上是否是一个问题......
猜你喜欢
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多