2017-01-30 17 views
0

Firefox раз при попытке найти элемент, который виден, но первое совпадение скрыто.Selenium Firefox - элемент не отображается, когда 1-й матч скрыт, а 2-й вид

С 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, чтобы показать «Calculate the Price», тест продолжается.

Это ошибка? Или это ожидаемое поведение? Есть ли обходной путь?

Большое спасибо!

+0

попробовать это два XPath , '// a [@ class = 'menu - tier-one-link menu - item'] [содержит (текст(), 'Mail & Ship')]' другой xpath is // // a [@ class = ' menu - tier-two-link '] [@ 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 не очень понятен в том, что он найдет первый элемент независимо от видимости. Я ожидаю, что он попытается найти видимый элемент. В любом случае, по-видимому, существует непоследовательное поведение между браузерами. –

 Смежные вопросы

  • Нет связанных вопросов^_^