如何在步骤定义中应用定位器选择

How in a step definition to apply selection of locators

我对使用 By 语句使用多个定位器有疑问。

下面我有一段代码,它将根据 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);
    }

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

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;
        }
    }