2017-10-14 90 views
0

我有一个关于使用By语句使用多个定位器的问题。如何在步骤定义中应用选择定位器

下面我有我的一段代码在那里将输入到基础上,由第一个字段:

public void GetFieldAndEnterText(By fieldElement, string fieldText) => 
     _driver.FindElement(fieldElement).SendKeys(fieldText); 

在我的步骤定义,我努力工作,如何确定使用哪个定位器基于specflow步骤中提到的领域。

我有下列步骤操作:

When I enter in invalid email Test.TestEmail.plc for Email address field 
    And I enter in invalid email Test.TestEmail.gmail.com for Confirm email address field 

我几乎希望它是,如果该字段为电子邮件地址,然后用此定位:

_payment.GetFieldAndEnterText(PaymentDetailsResponsiveElements.EmailAddressField); 

如果该字段确认电子邮件地址:

_payment.GetFieldAndEnterText(PaymentDetailsResponsiveElements.ConfirmEmailAddressField); 

如何在下面的步骤定义中应用此项?

[When(@"I enter in invalid email (.*) for (.*) field")] 
    public void WhenIEnterInInvalidEmailForField(string fieldText, By fieldElement) 
    { 
      _payment.GetFieldAndEnterText(fieldElement, fieldText); 
    } 
+0

为什么要进入那种细节?您可以创建一个或两个步骤。当我在无效的电子邮件中输入地址字段时我输入一个无效的确认电子邮件地址,或者当我输入地址[email protected]并确认电子邮件地址[email protected]然后我遇到不匹配错误。然后你根据字符串字段做两个条目。 – Dazed

回答

1

你也可以这样做。我使用了场景大纲,但您可以不用。

Given on the <Field> I enter <Value> 
And I click the sign in button 
Then I can validate the <ErrorMessage> is thrown for <Field> 

     Examples: 
     | Field | Value | ErrorMessage|              
     | email | N/A | Email is required. |             
     | password | N/A | Password is required| 

    [Given(@"on the (.*) I enter (.*)")] 
    public void GivenOnTheEmailIEnterNA(string field, string value) 
    { 
     switch (field.ToLower()) 
     { 
      case "email": 
       CallYourElement.TypeEmail(value.ToLower() == "n/a" ? "" : value); 
       break; 
      case "password": 
       CallYourElement.TypePassword(value.ToLower() == "n/a" ? "" : value); 
       break; 
     } 
    } 


    [Then(@"I can validate the (.*) is thrown for (.*)")] 
    public void ThenICanValidateTheEmailIsRequired_IsThrownForEmail(string expectedError, string field) 
    { 
     switch (field.ToLower()) 
     { 
      case "email": 
      { 
       var receivedError = CallYourElement.GetEmailRequiredError(); 

       Assert.AreEqual(expectedError, receivedError); 
      } 
       break; 

      case "password": 
      { 
       var receivedError2 = CallYourElement.GetEmailPasswordRequiredError(); 

        Assert.AreEqual(expectedError, receivedError2); 

      } 
       break; 
     } 
    } 
相关问题