Selenium:是不是可以将 xpath 与变量连接起来?

Posted

技术标签:

【中文标题】Selenium:是不是可以将 xpath 与变量连接起来?【英文标题】:Selenium: Is it possible to concatenate an xpath with a variable?Selenium:是否可以将 xpath 与变量连接起来? 【发布时间】:2010-09-29 01:14:40 【问题描述】:

我的元素的 xpath 变得非常难以阅读。

//div[@id='main_content']/div[2]/div[2]/div[2]/div[4]/table/tbody/tr[2]/td/form/fieldset/ p[1]/输入

如果我可以将其中的大部分存储为变量并在以后像这样使用它,那就太好了:

|断言元素呈现 | $myForm 。 /fieldset/p[1]/输入 |

这样的事情可能吗?这将使我的测试更容易阅读!

【问题讨论】:

【参考方案1】:

真的应该将你的 selenium espressions 锚定在元素的 ID 中。在 2 个月内,没有人会对 xpath 指向的内容有丝毫的了解,尤其是在您需要找出原因时测试被破坏的情况下。我们经常将 id 添加到元素中,以使测试更容易。我们已经学会接受我们以一种特殊的方式编写 Java 代码以使其可测试,而且我认为 html 也可以。

【讨论】:

我完全同意你的看法。我给出的例子可能不是最好的说明我为什么要做到这一点。我之所以尝试这样做是因为元素 ID 是随机生成的,所以我不知道它们是什么。 好吧,你可以在 dom 结构中进一步锚定,或者制作你知道的 som id 如果 id 来自业务数据,您可以在附近的某处添加位置 id【参考方案2】:

你可以写:

store | //div[@id='main_content']/div[2]/div[2]/div[2]/div[4]/table/tbody/tr[2]/td/form | myForm
assertElementPresent | xpath=$myForm/fieldset/p[1]/input

然而,正如 Krosenvold 所说,长 xpath 可能非常脆弱。如果您担心代码的可读性,并希望将所有定位器放在一个可以进行级联更改的文件中,您可能需要考虑使用 UI-Element 映射。

【讨论】:

以上是关于Selenium:是不是可以将 xpath 与变量连接起来?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python Selenium 的 xpath 中使用变量

selenium,xpath路径中引入变量

求 selenium By.xpath 包含变量 解决方案

python selenium xpath 的tr[]中如何写变量的运算?

Selenium xpath 对 python 的行为与对 ruby​​ 的行为不同 [重复]

selenium 动态元素的定位