我有一个文本框,我在测试期间输入文本,例如" 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;
}
});
对我不起作用,因为没有价值,因为它没有保存。
答案 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!");
}