【问题标题】:Unable to use XPath to select input element based on content无法使用 XPath 根据内容选择输入元素
【发布时间】:2017-07-05 13:27:54
【问题描述】:

我有一个 Selenium Webdriver 测试,我想等待文本输入字段包含特定值,然后再进行下一步。我知道价值是什么(“奥库拉镇”),它是由 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 排列,它可以根据元素的内容定位元素。

【问题讨论】:

  • 您看到的错误是什么?您可以考虑更新问题区域中的错误堆栈跟踪吗?谢谢
  • 它只是超时 - 它永远不会根据内容解析元素。

标签: c# selenium xpath selenium-webdriver


【解决方案1】:

TextToBePresentInElement 使用 getText 方法检查元素中的值。 getText 方法为输入类型的元素返回空值。等到输入文本中的值变成某个值。您可以使用以下预期条件。

new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout))
    .Until(ExpectedConditions.TextToBePresentInElementValue(DpNumber, "Town of Oakura"));

另外,text() 函数将返回空输入框。所以我们不能在xpath中使用它。

【讨论】:

    【解决方案2】:

    您可以将等待重写为

     (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 文档中获取了这个

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢我确实尝试过这种排列。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 2018-05-21
      • 2015-04-03
      • 1970-01-01
      • 2021-03-14
      • 2012-03-18
      相关资源
      最近更新 更多