2013-04-10 3 views
2

저는 django_facebook을 사용하여 Facebook 상호 작용을하고 Selenium을 사용하여 자동화 된 시스템 테스트를하고 있습니다.페이스 북에서 로그인 Selenium 테스트

 self.browser.get(self.live_server_url) 
     self.browser.find_element_by_xpath('//*[@id="facebook_login_js"]/input').click() 

     self.browser.switch_to_window(self.browser.window_handles[1]) 
     self.login_to_facebook() 

를하지만, 페이스 북의 JS SDK는 비동기 초기화 과정을 완료하지 않았기 때문에 그것은 실패 테스트에서

, 내 응용 프로그램에서 페이스 북에 로그인에 관해서, 나는이 작업을 수행. 과거에 일하는 데 사용 된 테스트가 있었지만 느린 초기화와 같이 현재 변경된 사항이 있는지 알 수 없습니다.

나는 fbAsyncInit을 사용하는 것과 같은 해결책을 생각해 냈지만, 그 코드는 자바 스크립트 파일의 django_facebook에서 제공하고 있으며, 나는 그것을 건드리고 싶지 않다.

로그인 기능을 사용할 수 있도록 Facebook JS SDK가 완전히로드 될 때까지 기다리는 방법을 알고 계십니까?

답변

0

마침내 Facebook 초기화를 무시해야하므로 나중에 문제가 발생하지 않았습니다. 간단히 말해

function facebookJSLoaded(){ 
    FB.init({appId: facebookAppId, status: false, cookie: true, xfbml: true, oauth: 

    $('#fb-root').attr("data-sdk-loaded", 1); 
}; 

window.fbAsyncInit = facebookJSLoaded; 
F = new facebookClass(facebookAppId); 
F.load(); 

(이것은 How to detect when facebook's FB.init is complete과 매우 유사한 해결책입니다). 셀렌 테스트에서이 속성이 fb-root에 나타나서 로그인 버튼을 클릭하기를 기다립니다.

1
self.browser.get(self.live_server_url); 
self.browser.find_element_by_xpath('//*[@id="facebook_login_js"]/input').click(); 

self.browser.switch_to_window(self.browser.window_handles[1]); 

window.set_timeout(function(){ 
    self.login_to_facebook(); 
}, 1000) 

위의 내용은 로그인을 호출하기 전에 1 초간 기다리게합니다. 1000을 변경하여 시간을 재생할 수 있습니다. Set_timeout은 밀리 초 단위로 시간 값을 사용합니다 (따라서 1000 = 1 초).

+0

문제는 SDK가 아직로드되지 않았기 때문에 클릭이 아무것도 발생하지 않는다는 것입니다. "login_to_facebook"메시지는 로그인 양식을 채우기로되어 있습니다. – geekazoid

+0

@geekazoid 글쎄, SDK가 아직'set_timeout()'내부에로드되지 않았기 때문에 당신이 생각하지 않는 모든 것을 넣으십시오. – Ryan

+0

다른 해결책은 두 개의 창이 나타날 때까지 "클릭"하는 것입니다.하지만이 방법이 좋지 않다는 것을 알고 있습니다. 로드 시간이 다를 수 있으므로 잠시 기다려야합니다. "fb-root"div 또는 일부 변경에 대해 생각하고 있었지만 설명서에서 추측 할 수는 없습니다. – geekazoid

관련 문제