2016-07-28 86 views
2

我找到了使用下一個構造的元素。模擬WebDriverWait僅用於WebElement

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement wsearchlist = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(""))); 
之後,我想尋找內部元素

By by = new By.ByLinkText(testName); 
wsearch = wsearchlist.findElement(by); 

這種行爲不是要等到內部部件的可用性

。我想使用相同或相同的「等待」對象來搜索另一個元素。這怎麼可能?

回答

3

elementToBeClickable預計By對象以及WebElement對象作爲輸入,你等到這個元素可見並如下點擊: -

wait.until(ExpectedConditions.elementToBeClickable(wsearch)); 

如果你想等待嵌套元素嘗試使用presenceOfNestedElementLocatedBy其預期WebElementBy對象等到元件的存在對DOMWebElement如下上下文: -

By by = new By.ByLinkText(testName); 
WebElement wsearch = wait.until(ExpectedConditions.presenceOfNestedElementLocatedBy(wsearchlist, by)); 

希望它有助於... :)

+0

我用這個cunstruction完全可以得到元素。在JS添加內容的情況下,所以應該等待它。我沒有元素只是由.. –

+0

@YevgenKulik然後,你應該使用'presenceOfNestedElementLocatedBy' .. ..查看更新的答案 –

1

可以使用您的WebDriverWait參考創建一個自定義函數來協助此過程。

提供的代碼示例是未經測試

WebDriverWait wait = new WebDriverWait(driver, 10); 
     wait.ignoring(NoSuchElementException.class); 

     final String testName = ""; 
     final WebElement wsearchlist = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(""))); 
     WebElement wsearch = wait.until(new Function<WebDriver, WebElement>() { 
      public WebElement apply(WebDriver input) { 
       By by = new By.ByLinkText(testName); 
       WebElement search = null; 
       search = wsearchlist.findElement(by); 
       return search; 
      }}); 

     //Continue on. 

如果wait.ignoring電話不會在NoSuchElementException工作,然後添加一個try/catch塊到功能

WebDriverWait wait = new WebDriverWait(driver, 10); 
     //wait.ignoring(NoSuchElementException.class); 

     final String testName = ""; 
     final WebElement wsearchlist = wait.until(ExpectedConditions.elementToBeClickable(By.xpath(""))); 
     WebElement wsearch = wait.until(new Function<WebDriver, WebElement>() { 
      public WebElement apply(WebDriver input) { 
       By by = new By.ByLinkText(testName); 
       WebElement search = null; 
       try { 
        search = wsearchlist.findElement(by); 
       } catch (NoSuchElementException nsee) { 
        nsee.printStackTrace(); 
        //FIXME: LOG THIS 
       } 
       return search; 
      }}); 

     //Continue on.