我正在一个 ERP 中工作,其中元素 id 随机更改/旋转。因此,如果我正在编写代码来定位 id,下次我运行 selenium 代码时,由于 id 到那时发生了变化,它会出现错误
如何每次都捕获 id
我正在一个 ERP 中工作,其中元素 id 随机更改/旋转。因此,如果我正在编写代码来定位 id,下次我运行 selenium 代码时,由于 id 到那时发生了变化,它会出现错误
如何每次都捕获 id
可悲的是,听起来在这种情况下使用 ID 不是一个选项
许多网站实施安全措施以防止自动化。虽然这使您的工作更加困难,但它确实提高了应用程序的安全性。那么可以做些什么来绕过这些安全技巧呢?
为该元素使用不同的唯一常数
这可能意味着使用类、xpath、类和 xpath 或大量其他标识符来尝试识别您想要的元素。这比您想象的要容易得多。一个很好的例子是创建所有链接的列表,根据它们的类缩小链接列表,然后遍历剩余的列表,直到它包含您要查找的文本。
使用不同于 UI 自动化的方法
根据您尝试通过测试完成的任务(按钮有效还是流程有效?),您始终可以绕过整个 UI,只使用 HTTP 请求来模拟用户。在某些应用程序中,这可能是不可能的,但通常说起来更快、更顺畅,维护工作也少得多。此外,使用 fiddler 等应用程序记录 HTTP 非常简单。
在配置中具有可调整的安全设置
这对开发人员来说可能是一个巨大的痛苦,但它对于安全网站来说是非常有用的功能。通过实施优化站点以实现自动化的配置,它将允许自动化团队轻松、更有效地构建他们的脚本。然而,这会导致缺点,因为它可能是一个安全问题,并且说服人们对此的需求可能是一项压倒性的、冗长的任务,最终做得很差。
和一份备忘单来帮助
该备忘单将帮助定位元素的 XPath 和 CSS。根据浏览器,如果 ID 等不是一个选项,您通常应该选择 CSS 而不是 XPath(性能原因)。这尤其适用于 IE。
TL;博士
你有很多选择,只是没有那么多好的选择。它会增加执行任务所需的处理能力,并且可能会减慢测试速度(除非您绕过更高效的 UI)。但是,这是很有可能的。
您不能每次都捕获 id,您需要找到其他唯一标识元素的方法。我假设这是一个您无法控制的第 3 方工具,但如果您有控制权,您可以要求开发人员提供唯一 ID 或其他一些唯一标识符。
您还有其他一些选择是使用其他属性(例如类、名称、标题等)来识别元素。您还可以通过标记名获取所有元素,然后遍历列表以查找与内部文本匹配的元素,甚至只是按索引。有许多选项使用 xpath 或 css 选择器来唯一标识元素,具体取决于 html 的外观。
如果您想提供一些示例 html,我或其他人可能会帮助您为您正在使用的任何元素创建一个标识符。
使用另一个标识符来标识对象或使用 xpath,例如:
以。。开始
如果您的动态元素的 id 的格式为 button id="continue-12345" 其中 12345 是动态数字,您可以使用以下格式
XPath: //button[starts-with(@id, 'continue-')]
包含
有时一个元素被一个可以被其他文本包围的值标识,然后可以使用包含函数。
XPath: //input[contains(@class, 'suggest')]
基于图像处理的Sikuli致力于屏幕元素的光学识别,而不是 HTML 元素,并且可以成为绕过那些讨厌的变化的 ID 的方法。