[英]Passing parameters in Data Tables Selenium/Cucumber/Java
我使用POM模型并将Cucumber用于自动化。
我正在尝试对登录实施否定方案,并且使用了以下策略。
我需要知道这是正确的方法还是将其弄乱了。
我正在使用xpath断言Login。
login.feature
Given User navigates to Site
And User enters a "<Username>" username
And User enters a "<Password>" password
When User clicks on the login button
Then User should see the failure "<message>"
Examples:
| Username | Password | message|
| User | Pwd | //DIV[@class=''][text()='Your login name or password is incorrect.']/../..] |
login.steps
@Then("^User should see the failure \"([^\"]*)\"$")
public void user_should_see_the_failure(String arg1 ) throws Throwable {
login_page.assertLoginFailure(arg1);
}
login.page
public @FindBy(xpath = "//DIV[@class=''][text()='Your login name or password is incorrect.']/../..")
WebElement assert_LoginFailure;
public login_page assertLoginFailure(String arg1) throws Exception {
Thread.sleep(5000);
org.testng.Assert.assertEquals(assert_LoginFailure,arg1);
return new login_page();
}
登录失败时, DataTable
message下的值应为预期的纯文本。 理想情况下,不应包含任何xpath或任何选择器。
选择器应在pageobject中定义。 同样,应该修改选择器以不包括文本本身。
这样,当测试失败时,您将获得NoSuchElementException
而不是获取AssertionError
。 无法判断测试是由于无效凭证证明有效还是通过网站上的消息更改而导致失败。
Thread.sleep()
有点皱眉。 而是看一个隐式或显式等待。 参阅此-http://toolsqa.com/selenium-webdriver/implicit-explicit-n-fluent-wait/
这是您的主张:
org.testng.Assert.assertEquals(assert_LoginFailure,arg1);
其中assert_LoginFailure是一个Web元素,而arg1是一个String 。 现在,将字符串与Web元素进行比较没有任何意义,不是吗?
您必须提取 Web元素中存在的文本 ,例如:
assert_LoginFailure.getText()
您的断言如下所示:
org.testng.Assert.assertEquals(assert_LoginFailure.getText(),arg1);
希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.