无法使用XPath根据内容选择输入元素

时间:2017-07-05 00:46:31

标签: c# selenium xpath selenium-webdriver

我有一个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的任何排列。

3 个答案:

答案 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')]")));