2012-04-12 2 views
0

일반적인 아코디언 스타일로 콘텐츠를 표시/숨기기위한 div가 있습니다. HTML은 다음과 같습니다.Selenium : WebDriverWait과의 타이밍 불일치 및 클릭

<div class="accordionContainer"> 
    <div class="accordion"> 
     <h3>Click This</h3> 
     <div class="accordionContent" style="display:none"> 
     </div> 
    </div> 
    <div class="accordion"> 
     <h3>Click This</h3> 
     <div class="accordionContent" style="display:none"> 
     </div> 
    </div> 
</div> 

그때 accordionContent에있는 링크를 엽니 다 첫 번째 H3를 선택하고 내 파이썬을 가지고있다.

WebDriverWait(ff, 10).until(lambda driver : driver.find_element_by_xpath("id('main_content')/div[3]/div/div/div[1]/h3[1]")).click() 

WebDriverWait(ff, 10).until(lambda driver : driver.find_element_by_xpath("id('main_content')/div[3]/div/div/div[1]/div/p/a")).click() 

는 나는이 &가 작동 볼 실행했다. 그러나 대부분의 경우 실패합니다. 첫 번째 DIV은 (는) 내용을 표시하기 위해 회전에 (나는 작은 화살표를 볼 수 있습니다 클릭하지만 즉시 초기 상태로 되돌아으로 두 번 클릭 얻을 것으로 보인다 나는 오류 얻을됩니다;

이상하게
[exec] selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' 

때 할 수있는 생각을 볼 수는() 같은 클릭을 호출하는 경우 작동 두 번째 라인 열려 있지 클릭했지만한다.

그 두 번째 XPath는이 accordionContentdisplay: block?

답변

1

로 변경되었는지 확인하기 위해 전진 할 수 이 xpath는 작동해야합니다.

"//div[@class='accordionContainer']/div[@class='accordion'][1]/div[@class='accordionContent' and contains(@style, 'block')]" 

또는 구조가 매우 안전한지, 할 수있는 :

"//div[@class='accordionContainer']/div[1]/div[contains(@style, 'block')]" 

참고 : 나는 '아코디언'사업부의 종료 태그가 있어야한다는 예에 불과 오타라고 가정하고 닫는 태그 (여는 태그가 아닌).

+0

시간 초과가 발생하지만 감사합니다. 매개 변수를 '및'사용할 수 있다는 것을 알고 있습니다. div에 두 번 클릭하여 (') 호출하여 일관되게 열어야합니다. 나는 그것이 작동하는 방식으로 살 수 있지만 div가 열리기 위해 두 번 실행해야한다는 이상한 점이 있습니다 - 그 이유는 무엇일까요? –