2017-01-30 43 views
0

Firefox嘗試查找可見但隱藏第一個匹配的元素時超時。Selenium Firefox - 元素在隱藏第一個匹配但第二個隱藏時不可見

www.usps.com,以下xpath - //a[.='Mail & Ship']其次//a[.='Calculate a Price']打開https://postcalc.usps.com/

在IE和Chrome上述作品。然而,在FF超時與 -

預期條件失敗:等待由By.xpath位於 元素的可見性://a[.='Calculate一價']

代碼採用的是

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath))).click(); 

使用Firepath,我看到有對//a[.='Calculate a Price']兩場比賽與第一個下的QuickTools菜單隱藏。在測試執行期間,當我手動點擊QuickTools菜單以顯示「計算價格」時,測試繼續。

這是一個錯誤?或者這是預期的行爲? 有沒有解決方法?

非常感謝!

+0

嘗試這種兩分的XPath 。 '// @ a [@ class ='menu-tier-one-link menu-item'] [contains(text(),'Mail&Ship')]'另一個xpath是'// a [@ class ='菜單 - 二級鏈接'] [@ href ='https://postcalc.usps.com/']' –

+0

謝謝我知道我可以製作一個更好的xpath。但是,我試圖瞭解在不同瀏覽器之間查找元素的行爲差異。 –

回答

0

當您使用driver.find_element_by_xpath(xpathgoeshere)時,單數「find_element」意味着硒將找到與您的參數匹配的第一個xpath,並停在此處。在這種情況下,具有該xpath的第一個元素是隱藏的,所以等待它變成可見的不會發生。

有幾種解決方法。我認爲最簡單的方法是找到要使用的元素的唯一xpath。

//a[.='Calculate a Price']可以是任何這些元素:

<a class="quick-tools--link quick-tools--calcprice" href="https://postcalc.usps.com/">Calculate a Price</a>` 

<a class="left-nav--link firepath-matching-node" href="/calculateretailpostage/welcome.htm" target="">Calculate a Price</a>` 

<a class="menu--tier-two-link" href="https://postcalc.usps.com/">Calculate a Price</a>` 

您可以通過添加第二個選擇到您的XPath指定一個:

//a[.='Calculate a Price' and @class='quick-tools--link quick-tools--calcprice']

//a[.='Calculate a Price' and @class='menu--tier-two-link']

+0

javadoc不太清楚,因爲它會查找第一個元素,而與可見性無關。我希望它試圖找到一個可見的元素。無論哪種方式,瀏覽器之間似乎都存在不一致的行爲。 –

相關問題