我目前有几个场景,它不可避免地使用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提供一个特定的名称,然后在我的场景中使用它们?
希望你能帮忙!
答案 0 :(得分:3)
听起来你的Gherkin描述了应该如何做而不是应该做什么。
我想你想问问自己用户正在执行什么任务并对其进行描述。这使您有机会将支持类,页面对象或类似内容中的丑陋xpath等内容隐藏到您的步骤中。
这将允许您在更高的抽象级别上工作,并使您的小黄瓜变得不那么脆弱。
答案 1 :(得分:1)
您可以在绑定类中解决此问题。
在那里创建一个词典并预填充它。 在功能中使用字典的键,然后查找字典。
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];
...
}