2014-10-17 187 views
0

以下是我通常寫有名字=「電子郵件」找到一個元素硒 - 網絡驅動程序等待

WebElement emailInput = (new WebDriverWait(driver, 10)) 
     .until(ExpectedConditions.presenceOfElementLocated(By 
       .name("email"))); 

如果什麼有一個元素模態身體下方觀察

WebElement modalBody = enrollForm.findElement(By 
     .className("modal-body")); 

現在如果我找到另一種WebElement像八九不離十內的特定WebElement ...

WebElement a = driver.findElement(By.id("KeepSmiling"); 
WebElement b = a.findElement(By.className("ChocolatesMakeMeSizzle"); 

這裏b我是a中的一個元素。由於有許多其他的div className - > ChocolatesMakeMeSizzle

我希望這樣做,但WebDriverWait。我使用Thread.sleep(xx)避免了這個問題,但它是一個非常糟糕的方法。

這是我試過的(但我意識到,我試圖減慢webElement沒有任何意義)。

WebElement emailInput = (new WebDriverWait(modalBody, 10)) 
     .until(ExpectedConditions.presenceOfElementLocated(By 
       .name("email"))); 

任何提示如何實現這一目標?

自白:我老實說是避免這種方法並使用Thread.sleep(xx)。

我能夠使用xpath並找到方式,但我希望能回答我的問題! :)

+0

我們可以幫助你的問題與一些HTML的xpath。 – user2272115 2014-10-17 22:46:34

回答

3
WebElement emailInput = (new WebDriverWait(driver, 10)) 
     .until(ExpectedConditions.elementToBeClickable(By 
      .xpath("some_complex_xpath"))); 

如果該元素存在於DOM上,則不應該對模態有問題。 我正在測試一個大系統,所有的表單都是模態的,我們沒有任何問題可以使用ExpectedConditions來查找元素。

此外,尋找您可以使用XPath ...

這裏有一個例子:// 輸入[包含(@class, '名')] /以下::輸入[@類型= '按鈕' ]

+0

謝謝你。如果ids不工作,我可能會使用xpath。我不太好,因爲我非常誠實。我可以最終找到它,但我希望能夠使用modalBody ...不知何故... id和className讓我感受到了一個安全的泡泡。 – Indigo 2014-10-17 18:31:41

+1

您可以發佈該模式的HTML嗎?在xpath中,你可以使用一些函數,比如包含,文本(),以及像/之後的導航函數等。它有很多幫助! :) – br1337 2014-10-17 19:10:21

+0

不用擔心了,我坐了下來,想通了! :D – Indigo 2014-10-17 20:10:45