2013-03-27 17 views
6

W webdriverze, jak poprosić webdrivera, aby poczekał, aż tekst pojawi się w polu tekstowym.Czekaj aż tekst będzie obecny w polu tekstowym

W rzeczywistości mam jedno pole tekstowe kendo, którego wartości pochodzą z bazy danych, której załadowanie zajmuje trochę czasu. Po załadowaniu mogę przejść dalej.

proszę o pomoc w tym

Odpowiedz

10

Możesz użyć WebDriverWait. Z przykładu dokumentów:

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

Korzystanie WebDriverWait (org.openqa.selenium.support.ui.WebDriverWait) i ExpectedCondition (org.openqa.selenium.support.ui.ExpectedConditions) obiektów

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

textToBePresentInElement() jest teraz przestarzała –

2

Ty może użyć prostej metody, w której musisz przekazać webelement obiektu sterownika, w którym tekst ma nadejść, oraz tekst, który ma nadejść.

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

To jest złe, to wygląda dla węzłów tekstowych w danym 'WebElement', to znaczy, teksty inny element za, tekst pomiędzy elementami, i tak dalej. Pytanie dotyczy tekstu na wejściu, więc musi to być 'ExpectedConditions.textToBePresentInElementValue'. – Robert

2

Możesz użyć WebDriverWait. Z przykładu dokumentów:
powyżej stosując .getTex (ANS), to nie powraca tekst z pola wejściowego

zastosowanie .getAttribute ("wartość") zamiast GetText()

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

testowane 100% obróbki nadzieję, że pomoże

0

to jest moje rozwiązanie do wysyłania wiadomości tekstowych do wejścia:

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

Chociaż dostarczony przez Ciebie kod może zawierać odpowiedź na problem PO - post nie jest zbyt użyteczny bez wyjaśnienia, w jaki sposób rozwiązałeś problem. – Tom

0

Jedna liniówka, która działa i korzysta z funkcji lambda.

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