2013-03-27 10 views
6

In Webdriver, wie Sie an Webdriver bitten zu warten, bis Text im Textfeld vorhanden ist.Warten bis Text vorhanden im Textfeld

eigentlich habe ich ein Kendo-Textfeld, dessen Werte aus der Datenbank stammen, die einige Zeit zum Laden braucht. Sobald es geladen ist, kann ich weitermachen.

bitte helfen auf dieser

Antwort

10

Sie WebDriverWait verwenden können. Von docs Beispiel:

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

Mit WebDriverWait (org.openqa.selenium.support.ui.WebDriverWait) und ExpectedCondition (org.openqa.selenium.support.ui.ExpectedConditions) Objekte

WebDriverWait wait = new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.textToBePresentInElement(By.id("element_id"), "The Text")); 
+0

textToBePresentInElement() ist veraltet –

2

Sie kann eine einfache Methode verwenden, in der Sie das Treiberobjekt webelement übergeben müssen, in dem der Text kommen wird und der Text, der zu kommen ist.

public static void waitForTextToAppear(WebDriver newDriver, String textToAppear, WebElement element) { 
    WebDriverWait wait = new WebDriverWait(newDriver,30); 
    wait.until(ExpectedConditions.textToBePresentInElement(element, textToAppear)); 
} 
+0

Das ist falsch, es für Textknoten innerhalb des gegebenen 'WebElement' sieht, das heißt Texte der anderen Elements, Text zwischen den Elementen, und so weiter. Die Frage bezieht sich auf Text in einer Eingabe, also muss es "ExpectedConditions.textToBePresentInElementValue" sein. – Robert

2

Sie können WebDriverWait verwenden. Von docs Beispiel:
oben am mit .getTex() Dies ist nicht die Rückkehr Text aus Eingabefeld

Verwendung .getAttribute ("value") anstelle von getText()

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

getestet Funktion 100% Hoffnung diese

0

helfen Dies ist meine Lösung Text Eingang zum Senden:

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"); 
+0

Während der von Ihnen bereitgestellte Code die Antwort auf das Problem des OP enthält, ist der Beitrag ohne eine Erklärung, wie Sie das Problem gelöst haben, nicht sehr nützlich. – Tom

0

Ein Liner, der funktioniert und Lambda-Funktion verwendet.

wait.until((ExpectedCondition<Boolean>) driver -> driver.findElement(By.id("elementId")).getAttribute("value").length() != 0);