在数据表Selenium/Cucumber/Java中传递参数

在数据表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

我使用POM模型和Cucumber实现自动化

我正在尝试为登录实现一个负面场景,我使用了以下策略

我需要知道这是正确的方法,还是我把事情搞砸了

我正在使用xpath断言登录

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()。啊,谢谢!!我只是在您发布之前使用第一个答案完成了此操作!感谢您对我的帖子的帮助:):)继续做好工作。