【发布时间】:2016-05-07 16:08:03
【问题描述】:
我目前有一些情况不可避免地使用 XPath 来定位元素。这带来的一件不太整洁的事情是我的 specflow Gherkin 代码变得非常混乱。
例如,现在我有:
And User inserts 'testvan' into field with Xpath '//* [@id="content"]/div/div/div[1]/table/tbody/tr[3]/td[3]/div[1]/table/tbody/tr[5]/td[2]/input'
说实话,我讨厌这样。有什么方法可以在我的 SpecFlow 中创建一个数据集并将我所有的 XPath 放入其中,给我的所有 XPath 一个特定的名称,然后在我的场景中使用它们?
希望你能帮忙!
【问题讨论】:
-
在 java 中,通常我会将定位器放在带有名称的属性文件中,我会调用该名称..mkyong.com/java/java-properties-file-examples
-
两件事.. a) 使用 gherkin 是用可理解的语言编写测试。比起在 gherkin 中编写 xpath(对我来说这破坏了 gherkin 的使用),考虑添加诸如“并且用户将 'testvan' 插入字段 'Field_name'”之类的步骤。您可以维护一个散列来将这些参数映射到 xpath 或任何其他形式的定位器。 b)形成xpath时,尝试在中间使用'//'而不是编写完整的层次结构。编写完整的层次结构会使您的定位器变得脆弱。
-
添加到上述评论:1) 应尽可能避免使用
//*,因为它们会影响性能。在您的情况下,您知道元素的 ID,因此您也应该知道标签(例如//div[@id=...]); 2) 沿路径使用索引使 xpath 变得脆弱;如前所述,跳过中间的元素,或提供它们的 ID/唯一属性,而不是索引; 3)您真正关心的元素应该真正被识别(通过ID或其他一些属性)。所以你的 xpath 可能看起来像//div[@id="content"]//select[@some_prop='someval']- 突然不那么凌乱了?
标签: c# selenium specflow gherkin