2011-03-04 1 views
3

버튼을 클릭하는 webdriver를 사용하여 rspec 테스트를했습니다 ... 버튼을 클릭 한 후 페이지가 완전히로드되지 않습니다 올바른 동작). 버튼을 클릭 한 후 2 초 정도 기다린 다음 페이지가로드되지 않았음에도 불구하고 다른 URL로 이동하려고합니다. 페이지가로드되지 않았기 때문에 오류가 발생하지 않도록하고 싶습니다. 그냥 무시하고 모든 것이 좋은 것처럼 계속 진행하고 싶습니다. 페이지가 절대로드되어서는 안되며, 이는 예상 된 올바른 동작입니다.Selenium Webdriver - 클릭 후 계속해서 페이지로드 대기를 건너 뛸 수 있습니까?

어떻게하면 시간 초과가 될 때까지 기다리는 것을 피할 수 있습니까? 둘째, 실패 할 수있는 오류가 발생하지 않도록하려면 어떻게해야합니까?

감사합니다.

답변

0

WebDriver에는 차단 API가 있으며 항상 페이지로드를 기다립니다. 대신 JavaScript를 통해 버튼을 누르는 것, 즉 onclick 이벤트를 트리거하는 것입니다.) (이 후

WebDriver driver = ....; // Init WebDriver 
WebElement button = ....; // Find your element for clicking 
String script = "if (document.createEventObject){"+ 
     "return arguments[0].fireEvent('onclick');"+ 
    "}else{"+ 
    "var evt = arguments[0].ownerDocument.createEvent('MouseEvents');"+ 
    "evt.initMouseEvent('click',true,true,"+ 
    "element.ownerDocument.defaultView,1,0,0,0,0,false,"+ 
    "false,false,false,1,null);"+ 
    "return !element.dispatchEvent(evt);}" ; 
((JavascriptExecutor)driver).executeScript(script, button); 

는 2 초를 기다리고 당신이 사용하는 간단한 트릭을 시도하지 않는 이유

0

"대기를 계속할 수 : 루비에 익숙하지 않은,하지만 자바는 것 "그것을하게 waitForPageToLoad()는 셀레늄의 이전 명령을 무시하고 해당 단계를 결코 실패하지 않는다하기 후 RSpec에의 기대 방법을 사용하면 어떻게

0

:

expect { 
    Thread.new() { 
    sleep(2) 
    raise RuntimeError 
    } 
    theButton.click() 
}.to raise_error 
0

이 (가) 리튬에 키를 '입력'보내기 nw 또는 버튼을 누르는 대신 문제가 발생하면 webdriver는 페이지가로드 될 때까지 기다리지 않고 즉시 반환합니다 (C#에서는 그냥 Ruby로 번역됩니다).

element.SendKeys (Key, Return);

관련 문제