2017-10-14 93 views
0

我是新来specflow C#这样的道歉,如果我做了一些基本的编程错误。Specflow步骤定义失败因不能设置空隐式类型变量

我有我的specflow包含以下操作的列表:

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

... 

    And I enter in correct email [email protected] for Email address field 

    And I enter in non matching email [email protected] for Confirm email address field 

... 

And I enter in matching email address [email protected] for Confirm email address field 

的步骤之间唯一的变化是: - 电子邮件(无效,匹配,不匹配) 的类型 - 电子邮件地址 - 他们输入的文本栏

所以我认为让参数化他们,但我无法得到它的工作,所以我想要什么是解决这个问题的正确方法的一些帮助。

都在我试图找到一个元素通过它的定位器,并设置一个字符串类型的电子邮件文本代码首先:

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

在步骤定义我有它设置如下:

[When(@"I enter in (.*) email (.*) for (.*) field")] 
    public void WhenIEnterInInvalidEmailForField(string emailType, string fieldText, By fieldElement) 
    { 
     var email = _payment.GetFieldAndEnterText(PaymentDetailsResponsiveElements.EmailAddressField); 
     var confirmEmail = _payment.GetFieldAndEnterText(PaymentDetailsResponsiveElements.ConfirmEmailAddressField); 

     if (fieldElement.Equals("Email Address")) 
     { 
      return email; 
     }else if (fieldElement.Equals("Confirm Email Address")) 
     { 
      return confirmEmail; 
     } 

      _payment.GetFieldAndEnterText(fieldElement, fieldText); 
    } 

你可以看到,我试图通过三个不同的参数。第一个在代码方面并不重要,只是我可以一次又一次地使用这个步骤定义。

第二个参数是其在specflow提到知道键入哪些电子邮件的电子邮件。

最后一个参数是基于地方如果申请是电子邮件或证实电子邮件领域的定位,它会试图找到的元素。

然而,在步骤定义我收到的电子邮件和confirmemail变量错误,不能设置空隙隐含类型和返回是行不通的,因为它是一个void类型。

解决此问题的正确方法是什么?

+0

尝试把单引号你周围的参数(和调整您正则表达式)。因此,这将是“我的‘正确’电子邮件‘[email protected]’为‘电子邮件地址’字段中输入”和[当(@“我输入‘(。*)’电子邮件‘(。*)’为“(。*)”字段“) –

回答

0

您的代码有几个问题。你提到你是C#的新手,我会建议你花一些时间做一些C#编程教程,阅读一些好书等。

GetFieldAndEnterText()void return ...这意味着它不会返回任何东西,但你将其归还给WhenIEnterInInvalidEmailForField()中的emailconfirmEmail。这是错误的原因。如何解决这个问题还不清楚,因为我不明白你的方法应该做什么。请用文字描述你希望你的WhenIEnterInInvalidEmailForField()做什么并返回,如果有的话。

GetFieldAndEnterText()需要两个参数,但您只能通过emailconfirmEmail行中的一个。

您在ifelse if中比较By类和string类。

您在WhenIEnterInInvalidEmailForField()中使用return两次,应该返回void

您传递string emailType,但从来没有使用它。

+0

所以我想whenienterininvalidemailforfield()所要做的只是输入(的SendKeys)为元素的文本框中。所有的步骤简单地在文本是根据有关一步 –

+0

的电子邮件地址,所以基本上键入相关字段(文本框)),您在通过相关文本 –

+0

你所描述的是'GetFieldAndEnterText('方法进入用于电子邮件或确认电子邮件字段的“By”定位器。为什么有另一种方法? – JeffC