2017-01-30 3 views
0

Firefox 첫 번째 일치 항목이 표시되지만 숨겨진 항목을 찾으려고하면 시간이 초과됩니다.Selenium Firefox - 첫 번째 일치 항목이 숨겨져 있지만 두 번째 항목이 표시 될 때 표시되지 않는 요소

www.usps.com에서

, 다음 xpath-//a[.='Calculate a Price'] 다음 //a[.='Mail & Ship']

IE와 크롬에서 위의 작품 https://postcalc.usps.com/을 엽니 다. 그러나 FF에 시간

예상되는 상태가 실패 뿐인데 아웃 : By.xpath에 의해 에 위치한 요소의 가시성을 기다리고 : //a[.='Calculate 가격을 ']

코드 사용 전 //a[.='Calculate a Price']에 대한 두 경기가 QuickTools 메뉴의 숨겨진 첫 번째로가 참조 Firepath를 사용

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

입니다. 테스트 실행 중에 QuickTools 메뉴를 수동으로 클릭하여 "가격 계산"을 표시하면 테스트가 진행됩니다.

이것은 버그입니까? 또는이 예상되는 동작입니까? 해결 방법이 있습니까?

감사합니다.

+0

이 두 XPath를 시도 :

<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'] 이러한 요소 중 하나가 될 수있다 . 또 하나의 xpath는'// a [@ class = 'item'] [item '] [item (text(),'Mail & Ship ' 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' and @class='quick-tools--link quick-tools--calcprice']

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

+0

javadoc은 가시성에 관계없이 최초의 요소를 발견 할 수있는 점에서 그다지 명확하지 않습니다. 나는 그것이 보이는 요소를 찾으려고 할 것이라고 기대한다. 어쨌든 브라우저간에 일관성없는 동작이있는 것 같습니다. –