15

在 webdriver 中,如何要求 webdriver 等到文本字段中出现文本。

实际上我有一个剑道文本字段,其值来自数据库,需要一些时间来加载。加载后,我可以继续进行。

请帮忙

4

6 回答 6

24

您可以使用 WebDriverWait。从文档示例:

 (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.findElement(...).getText().length() != 0;
            }
        });
于 2013-03-27T10:50:35.833 回答
16

您可以使用WebDriverWait. 来自文档示例:
上面的 ans 使用.getTex()this 不会从输入字段返回文本

使用.getAttribute("value")而不是getText()

(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
    public Boolean apply(WebDriver d) {
        return d.findElement(...).getAttribute("value").length() != 0;
    }
});

测试 100% 工作希望这会有所帮助

于 2015-08-25T10:59:19.080 回答
10

一种可以工作并使用 lambda 函数的班轮。

wait.until((ExpectedCondition<Boolean>) driver -> driver.findElement(By.id("elementId")).getAttribute("value").length() != 0);
于 2018-01-19T08:12:04.633 回答
5

使用WebDriverWait (org.openqa.selenium.support.ui.WebDriverWait)ExpectedCondition (org.openqa.selenium.support.ui.ExpectedConditions)对象

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("element_id"), "The Text"));
于 2013-03-28T14:25:05.163 回答
3

您可以使用一个简单的方法,在该方法中,您需要传递将要发送文本的驱动程序对象 webelement 和要发送的文本。

public static void waitForTextToAppear(WebDriver newDriver, String textToAppear, WebElement element) {
    WebDriverWait wait = new WebDriverWait(newDriver,30);
    wait.until(ExpectedConditions.textToBePresentInElement(element, textToAppear));
}
于 2014-08-07T04:51:02.060 回答
1

这是我将文本发送到输入的解决方案:

  public void sendKeysToElement(WebDriver driver, WebElement webElement, String text) {
    WebDriverWait wait = new WebDriverWait(driver, Configuration.standardWaitTime);
    try {

        wait.until(ExpectedConditions.and(
                ExpectedConditions.not(ExpectedConditions.attributeToBeNotEmpty(webElement, "value")),
                ExpectedConditions.elementToBeClickable(webElement)));

        webElement.sendKeys(text);

        wait.until(ExpectedConditions.textToBePresentInElementValue(webElement, text));

        activeElementFocusChange(driver);

    } catch (Exception e) {
        Configuration.printStackTraceException(e);
    }
}

WebElement nameInput = driver.findElement(By.id("name"));
sendKeysToElement(driver, nameInput, "some text");
于 2017-05-19T11:15:11.387 回答