如何使用页面对象使用WebDriver声明元素的文本更改?

时间:2015-02-22 10:17:06

标签: selenium-webdriver automation webdriver pageobjects

不知何故,我被这个话题所困扰。我有一个页面对象类,如:

By job = By.xpath("//input[@id='job0']");

public Page triggerJob() {
    wait.until(ExpectedConditions.presenceOfElementLocated(job)).click();
    return this;
}

单击该按钮时,会显示文本,例如“成功”。现在我想声明这个文本显示在一个不在页面对象中的测试方法中:

public void testTriggerJob() {

    driver.get(url);

    Page = new Page(driver);

    Page.triggerJob();

}

我该怎么做?我尝试了几种方法但没有效果。如果有人能给我一个提示,那就太棒了 - 非常感谢!

致以最诚挚的问候,

丹尼尔

2 个答案:

答案 0 :(得分:1)

你可以尝试一件事 - 在您的PO中创建一个本地var,一旦执行单击查找文本。然后在您的测试方法中调用一个方法,该方法将返回该文本以断言。所以它可能有点......

private String strSuccessMsg = "";
By spnMessage = By.id("de.xyz.jobs.Job_0");
public Page jobTriggered() {
   wait.until(ExpectedConditions.presenceOfElementLocated(job)).click();
    try{
        strSuccessMsg = wait.until(ExpectedConditions.presenceOfElementLocated(spnMessage)).getText();
    }catch(TimeOutException toe){
        strSuccessMsg = "Message not found.";
    }
    return this;
}

并添加另一个方法来返回存储的字符串。

public String getMessage() {
    return strSuccessMsg.trim();
}

然后在您的测试方法中,您可以执行:

driver.get(url);
Page = new Page(driver);
Page.triggerJob();
Assert.assertEquals(Page.getMessage(), "successfully triggered", Page.getMessage());

答案 1 :(得分:0)

最后我明白了,非常感谢!问题是该元素看起来几乎相同,但点击按钮后它改变了" //输入" to" // span"我没有看到。因为我认为它与我在两种情况下使用spnMessage的元素相同。在意识到它没有找到元素之后,因为请求在它出现之前完成了。现在我使用Thread.sleep(1000)并且它可以工作。我想知道为什么它实际上没有等待,但是嘿; - )

public Page triggerJob() throws InterruptedException {
    wait.until(ExpectedConditions.presenceOfElementLocated(job)).click();
    Thread.sleep(1000);
    try{
        successMessage = wait.until(ExpectedConditions.presenceOfElementLocated(jobSuccessMessage)).getText();

    }catch(TimeoutException timeOutException){
        successMessage = "Message not found.";
    }
    return this;
}