2013-03-27 53 views
6

在webdriver中,如何讓webdriver等待文本字段中出現文本。在文本字段中等待直到文本

實際上,我有一個kendo文本字段的值來自數據庫,需要一些時間來加載。一旦它加載,我可以繼續前進。

請在此幫忙

回答

10

您可以使用WebDriverWait。從文檔例如:

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

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

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

textToBePresentInElement()現在已經過時 – 2017-03-10 18:34:23

2

你可以使用一種簡單的方法,在該方法中,您需要傳遞文本即將到來的驅動程序對象webelement和正在發送的文本。

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

這是不對的,它看起來對於給定的'WebElement'內的文本節點,即,其它元素的文本,元素之間的文本,等等。問題是關於輸入中的文本,所以它需要是'ExpectedConditions.textToBePresentInElementValue'。 – Robert 2016-06-22 14:23:05

2

您可以使用WebDriverWait。從文檔例如:
以上ANS使用.getTex()從輸入字段,這是沒有返回文本

使用.getAttribute( 「值」),而不是的getText()

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

測試 100%的工作 希望這將有助於

0

這是我發送文本輸入解決方案:

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

儘管您提供的代碼可能包含OP問題的答案 - 但如果沒有解釋您如何解決問題,該帖子並不是非常有用。 – Tom 2017-05-19 11:41:06

0

工作和使用lambda函數的單線程。

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