我有一个Selenium Webdriver测试,我想在转到下一步之前等待文本输入字段包含特定值。我知道它的价值(“Oakura之城”)并且由JavaScript设定。我尝试使用以下c#代码:
new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout))
.Until(ExpectedConditions.TextToBePresentInElement(DpNumber, "Town of Oakura"));
这每次都超时。所以我想我会尝试XPath等待字段更新:
new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout))
.Until(ExpectedConditions.ElementExists(By.XPath("//input[@id='DP_NUMBER'
and text()='Town of Oakura']")));
哪个也行不通。在Chrome中使用控制台我可以使用XPath来识别元素,定义为:
<input id="DP_NUMBER" type="text" name="DP_NUMBER"
data-bind="textInput:DP_NUMBER" class="js-bound">
扩展元素我可以确定value
是正确的。但是我找不到基于其内容定位元素的XPath的任何排列。
答案 0 :(得分:1)
您可以将等待重写为
(new WebDriverWait(driver, TimeSpan.FromSeconds(timeout))).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return driver.findElement("//input[@id='DP_NUMBER']").getText().length() != 0;
}
});
我从selenium docs
获取了这个答案 1 :(得分:1)
TextToBePresentInElement使用getText方法检查元素中的值。 getText方法为输入类型的元素返回空值。等到输入文本中的值变为某个值。您可以使用以下预期条件。
new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout))
.Until(ExpectedConditions.TextToBePresentInElementValue(DpNumber, "Town of Oakura"));
此外,text()函数将为输入框返回空。所以我们不能在xpath中使用它。
答案 2 :(得分:0)
text()='Town of Oakura'
以及ExpectedConditions.TextToBePresentInElement
正在寻找完全匹配。虽然它可能看起来完全匹配任何空格或特殊字符都会抛出结果。尝试使用contains
new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout))
.Until(ExpectedConditions.ElementExists(By.XPath("//input[@id='DP_NUMBER' and contains(text(), 'Town of Oakura')]")));