在数据表Selenium/Cucumber/Java中传递参数
我使用POM模型和Cucumber实现自动化 我正在尝试为登录实现一个负面场景,我使用了以下策略 我需要知道这是正确的方法,还是我把事情搞砸了 我正在使用xpath断言登录在数据表Selenium/Cucumber/Java中传递参数,java,selenium,cucumber,pageobjects,Java,Selenium,Cucumber,Pageobjects,我使用POM模型和Cucumber实现自动化 我正在尝试为登录实现一个负面场景,我使用了以下策略 我需要知道这是正确的方法,还是我把事情搞砸了 我正在使用xpath断言登录 login.feature Given User navigates to Site And User enters a "<Username>" username And User enters a "<Password>" password When User c
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();
}
login.feature
给定用户导航到站点
用户输入一个“”用户名
用户输入“”密码
当用户单击登录按钮时
然后用户应该会看到失败“”
示例:
|用户名|密码|消息|
|用户| Pwd |//DIV[@class=''][text()='您的登录名或密码不正确。]/..]|
login.steps
@然后(“^User应该看到失败\”([^\“]*)\“$”)
public void用户\u应该\u看到\u失败(字符串arg1)抛出了Throwable{
登录页面。资产登录失败(arg1);
}
login.page
public@FindBy(xpath=“//DIV[@class=”][text()=“您的登录名或密码不正确”。]/../…)
WebElement assert_LoginFailure;
公共登录页面assertLoginFailure(字符串arg1)引发异常{
睡眠(5000);
Assert.assertEquals(Assert\u LoginFailure,arg1);
返回新的登录页面();
}
数据表中消息下的值应为登录失败时预期的纯文本。理想情况下,不应包括任何xpath或任何选择器
选择器应在pageobject中定义。还应修改选择器,使其不包含文本本身
这样,当测试失败时,您将得到一个NoTouchElementException
,而不是一个AssertionError
。无法判断测试失败是因为无效的凭证证明是有效的,还是站点上的消息已更改
Thread.sleep()
有点不受欢迎。相反,请查看隐式或显式等待。请参阅此-这是您的断言:
org.testng.Assert.assertEquals(assert_LoginFailure,arg1);
其中,assert\u LoginFailure是一个web元素,arg1是一个字符串。现在将字符串与web元素进行比较没有任何意义,是吗
您必须提取web元素中存在的文本,例如:
assert_LoginFailure.getText()
您的断言如下所示:
org.testng.Assert.assertEquals(assert_LoginFailure.getText(),arg1);
希望这会有所帮助。那么我如何在数据表中添加xpath呢?为什么需要在数据表中添加xpath?功能文件旨在描述行为而不是技术细节。xpath属于pageobject。那么我如何做断言呢?我想我可以通过基本上是xpath的(或任何元素定位器)对于多个主题,应该只包含所需的文本。根据您从站点获得的内容断言此文本,最有可能的方法是在相关的div或span上使用getText()。啊,谢谢!!我只是在您发布之前使用第一个答案完成了此操作!感谢您对我的帖子的帮助:):)继续做好工作。