在if语句中组合两次selenium按钮单击

本文关键字:两次 selenium 按钮 单击 语句 if 组合 | 更新日期: 2023-09-27 18:15:09

我想使用IF语句将以下两个按钮动作组合到SpecFlow场景中。

_driver.FindElement(By.Id("gbqfba")).Click(); // Google - 'Google Search'
_driver.FindElement(By.Id("gbqfsb")).Click(); // Google - 'I'm feeling lucky'

我想用(.*)传递"Google Search"或"I'm feeling lucky"。有什么最好的办法吗?

    [When("I click on (.*)")]
    public void WhenIClickOn(string buttonValue)
    {
    }

在if语句中组合两次selenium按钮单击

一个简单的方法是:

[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和任何相关位的对象的转换发生在单个地方,而不是在使用它的每个测试中。