Selenium Firefox - 当第一个匹配被隐藏但第二个可见时,元素不可见

时间:2017-01-30 23:39:31

标签: selenium xpath selenium-firefoxdriver

在尝试查找可见元素但第一个匹配被隐藏时,

Firefox超时。

www.usps.com开始,以下xpath - //a[.='Mail & Ship']后跟//a[.='Calculate a Price']会打开https://postcalc.usps.com/

上述内容适用于IE和Chrome。然而在FF中它超时 -

  

预期条件失败:等待位于元素的可见性   By By.xpath://a [。='计算价格']

使用的代码是

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

使用Firepath,我看到//a[.='Calculate a Price']有两个匹配,第一个隐藏在QuickTools菜单下。在测试执行期间,当我手动单击QuickTools菜单以显示"计算价格"时,测试继续进行。

这是一个错误吗?或者这是预期的行为? 有解决方法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

当您使用driver.find_element_by_xpath(xpathgoeshere)时,单数" find_element"意味着selenium将找到与您的参数匹配的第一个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']