在 SpecFlow 中使用我的 XPaths 的好方法

Neat way to use my XPaths in SpecFlow

我目前有几个场景不可避免地使用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 指定一个特定的名称,然后在我的场景中使用它们?

希望能帮到你!

您可以在绑定中解决此问题 class。

在那里创建一个字典并预先填充它。 在您的功能中使用字典的键并查找字典。

Dictionary<string,string> _xpaths = new Dictionary<string,string>() {{ "XPaht1", "//*  [@id=""content""]/div/div/div[1]/table/tbody/tr[3]/td[3]/div[1]/table/tbody/tr[5]/td[2]/input"}}

[Given("And User inserts '(.*)' into field with Xpath '(*.')")]
public void GivenXPath(string user, string xpathKey)
{
     var xpath = _xpaths[xpathKey];
     ...
}

听起来你的 Gherkin 描述的是应该如何做而不是应该做什么。

我想您想问自己用户正在执行什么任务并描述一下。这使您有机会在支持 class、页面对象或类似的步骤中隐藏丑陋的 xpath 之类的东西。

这将使您能够在更高的抽象级别上工作,并使您的 Gherkin 不那么脆弱。