我想使用IF语句将以下两个按钮操作组合到SpecFlow场景中。
_driver.FindElement(By.Id("gbqfba")).Click(); // Google - 'Google Search'
_driver.FindElement(By.Id("gbqfsb")).Click(); // Google - 'I'm feeling lucky'
我想使用(。*)传递'Google搜索'或'我感觉很幸运'。任何想法都是最好的方法吗?
[When("I click on (.*)")]
public void WhenIClickOn(string buttonValue)
{
}
答案 0 :(得分:1)
一种简单的方法是:
[When("I click on (.*)")]
public void WhenIClickOn(string buttonValue)
{
if(buttonValue=="Google Search")
{
_driver.FindElement(By.Id("gbqfba")).Click(); // Google - 'Google Search'
}
else if(buttonValue=="I'm feeling lucky")
{
_driver.FindElement(By.Id("gbqfsb")).Click(); // Google - 'Google Search'
}
else
{
throw new ArgumentOutOfRangeException();
}
}
但是,specflow还支持使用StepArgumentTransformation
:
[When("I click on (.*)")]
public void WhenIClickOn(ButtonIdentifier buttonId)
{
_driver.FindElement(By.Id(buttonId.Identifier)).Click();
}
[StepArgumentTransformation]
public ButtonIdentifier GetButtonIdentifier(string buttonValue)
{
switch (buttonValue)
{
case "Google Search":
return new ButtonIdentifier("gbqfba");
case "I'm feeling lucky":
return new ButtonIdentifier("gbqfsb");
default:
throw new ArgumentOutOfRangeException();
}
}
这确保了从规范中的id到封装该id和任何相关位的对象的转换发生在一个地方而不是每个使用它的测试中。