2

我正在开发一个 django 项目,使用 django_facebook 进行 Facebook 交互,使用 Selenium 进行自动化系统测试。

在测试中,当涉及到从我的应用程序登录到 facebook 时,我会这样做:

        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()

但它失败了,因为 Facebook 的 JS SDK 还没有完成它的异步初始化过程。我的测试过去可以正常工作,不知道现在是否发生了变化(比如初始化速度较慢)。

我想到了一个像使用 fbAsyncInit 这样的解决方案,但是该代码是由 django_facebook 在 Javascript 文件中提供的,我不想碰它。

知道如何等到 Facebook JS SDK 完全加载,以便我可以使用登录功能吗?

4

2 回答 2

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)

以上将使其在调用登录之前等待一秒钟。您可以通过更改1000. Set_timeout以毫秒为单位获取时间值(因此 1000 = 1 秒)。

于 2013-04-10T20:54:22.657 回答
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的解决方案)。在我的 selenium 测试中,我等待这个属性出现在 fb-root 中以单击登录按钮。

于 2013-04-12T14:12:12.757 回答