如何在步骤定义中应用定位器选择
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;
}
}
我对使用 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;
}
}