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();
}
我该怎么做?我尝试了几种方法但没有效果。如果有人能给我一个提示,那就太棒了 - 非常感谢!
致以最诚挚的问候,
丹尼尔
答案 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;
}