【问题标题】:Webdriver check text box value before leaving this text boxWebdriver 在离开此文本框之前检查文本框的值
【发布时间】:2013-12-03 17:02:17
【问题描述】:

我正在使用我创建的通用方法在我的所有页面对象中键入文本。

代码如下:

  public void clearAndSetValue(WebElement field, String text) {
        field.clear();
        field.click();
        field.sendKeys(Keys.chord(Keys.CONTROL, "a"), text);
  }

现在需要确保此方法始终检查文本框是否已填充我传递给该方法的参数文本。

所以我将方法改进为:

  public void clearAndSetValue(WebElement field, String text) {
    if (field.getText().equals("")) {
        field.clear();
        field.click();
        field.sendKeys(Keys.chord(Keys.CONTROL, "a"), text);
    }
  }

我的目的是确保字段值等于我想要输入的任何值,否则不要离开这个方法。

此方法不起作用,因为 field.getText() 在循环内的方法键入字符串时总是返回空。我猜是因为 getText() 只返回字段的原始状态?

此方法已被许多其他方法使用,因此我不想再向此方法传递任何参数。

有没有办法做到这一点?

谢谢。

【问题讨论】:

  • 你应该检查getText()getAttribute("value")

标签: java webdriver selenium-webdriver


【解决方案1】:

您需要做的是,在您执行 sendKeys 后获取文本框的文本并验证它是否与输入参数(文本)匹配,如果匹配则退出,否则使用循环逻辑重复这些步骤。您应该注意的一件事是,循环不会因为有一个退出循环的标志而进入无限状态。

【讨论】:

  • 感谢您的回复。我知道我需要在 sendKey 之后获取文本,但是如何获取呢?因为正如问题中所解释的, field.getText() 在我 sendKey 后返回空。
  • getText() 应该可以工作。如果没有看到元素的 html,很难分辨。正如其他人建议的那样,您也可以尝试 getAttribute 或使用 JSExecutor。
  • WebElement element = driver.findElement(By.id("")); JavascriptExecutor 执行程序 = (JavascriptExecutor) 驱动程序; value = executor.executeScript("return arguments[0].value;", element);
【解决方案2】:

您可能需要使用.getAttribute("value") 来捕获该字段的当前文本。

所以你的方法可能看起来像这样:

public void clearAndSetValue(WebElement field, String text) {
    if (field.getAttribute("value").equals("")) {
        field.clear();
        field.click();
        field.sendKeys(Keys.chord(Keys.CONTROL, "a"), text);
    }
}

注意:我猜它会是 .getAttribute(),正如你提到的使用文本字段元素但没有 HTML 来查看我不能 100% 确定它是。

【讨论】: