Selenium Java等待unitl文本显示为

时间:2017-03-10 13:11:10

标签: java selenium selenium-webdriver

我有一个文本框,我在测试期间输入文本,例如" cars",但通常不会在文本框中显示整个文本,例如#34; car" 。所以我的问题是我怎么能等到整个文本出现,我该怎么检查呢?

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.textToBePresentInElement(element, "text"));`

不适合我。这与没有它的结果相同。

[编辑]

Thread.sleep(4000);

也不适合我。

另外

(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver d) {
        return d.findElement(...).getAttribute("value").length() != 0;
    }
});

对我不起作用,因为没有价值,因为它没有保存。

1 个答案:

答案 0 :(得分:0)

你很接近,唯一缺少的是在轮询元素时捕获Selenium TimeOut Exceptions的循环。另外,我宁愿使用isDisplayed()而不是isTextPresent(),并将我的Xpath集中在定位您所追求的'cars'文本上。

这是等待的方法,它将根据轮询时间内是否存在元素(例如10秒)返回true /或false;值得注意的是,如果发现元素早于10秒限制存在,则循环将中断并返回true:

 public boolean waitForElement(String elementXpath, int timeOut) {

    try{                    
    WebDriverWait wait = new WebDriverWait(driver, timeOut); 
    boolean elementPresent=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(elementXpath)).isDisplayed());

    System.out.printf("%nElement is present [T/F]..? ")+elementPresent;
    }        
    catch(TimeoutException e1){e1.printStackTrace();elementPresent=false;}          

    return elementPresent;   
 }

现在,它真的归结为你如何'抓住'元素。你提到过,你想要出现整车文字。假设我们说元素是由id = brand定位的,你想要一个href链接里面的文本。所以你想要这样的xpath:

  

// div [@ id ='brand'] // a [text()[contains(。,'cars')]]

请注意,以上区分大小写,如果您正在寻找汽车,它将会失败。

祝你好运!

OP评论后

更新:

纠正我们识别网络元素的方式:

  

// DIV [@ ID = 'widget_dijit_form_TextBox_0'] // // DIV输入

现在需要的是使用上面的waitForElement直到元素出现。如果是,您可以使用以下方式获取文本:

String textInsideInputTag = elementPresent.getText();

现在您可以将其与预期值(即“汽车”)进行比较:

if(textInsideInputTag.equals("cars")){
System.out.println("Successfully found cars inside <input> tag");
}
else{
System.out.println("Couldn't locate cars in the element!");
}