Phantomjs 在casperjs测试中处理弹出窗口

Phantomjs 在casperjs测试中处理弹出窗口,phantomjs,casperjs,Phantomjs,Casperjs,我正在尝试对一个登录网页进行测试,其中有可能使用第三方社交登录。例如,当你点击facebook图标时,会出现一个新的弹出窗口,询问用户/密码。我使用文档中指定的waitForPopup和withPopup来处理这个问题,但不起作用。从未在xpath中找到元素(通过xpath),因此我无法在测试中使用facebook登录 这是一个示例代码,用于检查facebook按钮是否存在,单击它并等待弹出窗口: casper.then(function() { test.comment("When

我正在尝试对一个登录网页进行测试,其中有可能使用第三方社交登录。例如,当你点击facebook图标时,会出现一个新的弹出窗口,询问用户/密码。我使用文档中指定的waitForPopup和withPopup来处理这个问题,但不起作用。从未在xpath中找到元素(通过xpath),因此我无法在测试中使用facebook登录

这是一个示例代码,用于检查facebook按钮是否存在,单击它并等待弹出窗口:

  casper.then(function() {
    test.comment("When we click facebook button");
    casper.waitForSelector(x(facebookButton),  function() {
      test.assertExists(x(facebookButton), "Facebook icon is showing");
      casper.click(x(facebookButton));
    }, function timeout() { // step to execute if check has failed
      casper.test.fail("Timeout loading login page");
    });
  });

  casper.then(function() {
    casper.waitForPopup(/facebook\.com\/login/,  function() {
      test.comment("And we fill facebook login info");
      casper.withPopup(/facebook\.com\/login/,  function() {
        this.viewport(1600, 900);
        casper.sendKeys(x(facebookEmail), facebookLogin[0]);
        casper.sendKeys(x(facebookPassword), facebookLogin[1]);
        casper.click(x(facebookLogin));
      });
    }, function timeout() { // step to execute if check has failed
      casper.test.fail("Timeout loading faceebook login");
    });
  });
测试的输出为:

# When we click facebook button
PASS Facebook icon is showing
# And we fill facebook login info
FAIL Cannot get informations from xpath selector: //input[@id='email']: element not found.
#    type: uncaughtError
#    file: casper/import-login-testing.js:1058
#    error: Cannot get informations from xpath selector: //input[@id='email']: element not found.
#           CasperError: Cannot get informations from xpath selector: //input[@id='email']: element not found.
#               at getElementInfo (/Users/ginogalotti/testing-presentation/node_modules/casperjs/modules/casper.js:1058)
#               at /Users/ginogalotti/testing-presentation/node_modules/casperjs/modules/casper.js:1589
#               at casper/import-login-testing.js:84
#               at runStep (/Users/ginogalotti/testing-presentation/node_modules/casperjs/modules/casper.js:1553)
#               at checkStep (/Users/ginogalotti/testing-presentation/node_modules/casperjs/modules/casper.js:399)
#    stack: not provided
对我来说,这意味着正在查找弹出窗口,waitForPopup正在触发,只是没有使用弹出窗口来查找facebookEmail元素。我仍在学习casperjs,因此这可能不是解决问题的最佳方法;但我真的要感谢一些指导

提前感谢,


我正在测试的示例网站:

您的代码看起来不错。您使用的是什么PhantomJS版本?请注册到
resource.error
page.error
remote.message
casper.page.onResourceTimeout
事件()。可能有错误。添加了那些日志记录方法,但没有显示任何相关问题。仍然无法在内部找到xpath
//input[@id='email']
,这显然是存在的。我的幻影版本是0.8.0;和casperjs0.1.1。无论如何谢谢你!没有这样的幻影JS或CasperJS版本。也许你的意思是1.9.8和1.1.0-beta3。你绝对是对的!我有幻影1.9.18和caper 1.1.0-beta3。我要尝试更新幻影