【问题标题】:Protractor (WebDriverJS) cannot switchTo window. nameOrHandle is not defined量角器 (WebDriverJS) 无法切换到窗口。 nameOrHandle 未定义
【发布时间】:2013-08-23 03:30:36
【问题描述】:

我已经想尽了办法解决这个问题,但仍然无法让它发挥作用。我正在尝试切换到弹出窗口作为自动登录的一种方式。 (量角器只是 WebDriverJS 上的一个包装器,它添加了一些 AngularJS 功能。)webDriver 进入我的主页,单击登录按钮并等待登录弹出窗口。

到目前为止我有:

var ptor =  protractor.getInstance();
beforeEach(function() {
  var handlesDone = false;
  ptor = protractor.getInstance();
  ptor.get('#/');
  runs(function() {
    return ptor.findElement(protractor.By.className('btn')).click();
  });
  waits(3000);
  runs(function() {
    return ptor.getAllWindowHandles().then(function(handles) {
      popUpHandle = handles[1];
      parentHandle = handles[0];
      return handlesDone = true;
    });
  });
  waitsFor(function() {
    return handlesDone;
  });
});

到目前为止一切顺利,接下来我想确保我实际上有一个用于弹出窗口的窗口句柄:

describe('login', function() {
  it('should switch to popUp\'s handle', function() {
    expect(popUpHandle).toBeDefined();

最后,我尝试切换到这个窗口:

    ptor.switchTo().window(popUpHandle).getWindowHandle().then(function(handle) {
      expect(handle).toEqual(popUpHandle);
    });
  });
});

然而,无论我尝试了什么,我都会收到以下错误:

login
    should switch to popUp's handle

Failures:

  1) login should switch to popUp's handle
   Message:
     ReferenceError: nameOrHandle is not defined
   Stacktrace:
     ReferenceError: nameOrHandle is not defined
    at webdriver.WebDriver.TargetLocator.window (.../node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1385:32)
    at null.<anonymous> (.../test/e2e/e2e-spec.js:40:21)
    at ...node_modules/protractor/jasminewd/index.js:54:12
    at webdriver.promise.ControlFlow.runInNewFrame_ (.../node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1438:20)
    at webdriver.promise.ControlFlow.runEventLoop_ (.../node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1303:8)
    at Timer.exports.setInterval.timer.ontimeout (timers.js:234:14)
==== async task ====

Finished in 5.388 seconds
1 test, 2 assertions, 1 failure

如你所见,我有 2 个断言:

popUpHandle 已定义

switchTo后面的句柄和popUpHandle一样

我已经测试过我总共有 2 个句柄。我已经测试过它们都是字符串。我已经测试过它们彼此不同。在此示例中,我测试是否定义了 popUpHandle。所有这些测试都通过了。然而,无论我做什么,当我尝试将句柄插入 .switchTo().window() 方法时,我都会得到相同的“nameOrHandle is not defined”。

我被难住了。关于 WebDriverjs 的文档很少,我什至无法确定 switchTo 是否已实现。有谁知道这里发生了什么?

谢谢。

【问题讨论】:

  • 远不能确定它是正确的,但是您是否尝试过以下内容: ptor.switchTo().window(popUpHandle) ptor.getWindowHandle().then(function(handle) { expect(handle ).toEqual(popUpHandle); });
  • 我对调试您的代码了解不多,但只想说它对我的启动和运行很有帮助!

标签: angularjs webdriver protractor


【解决方案1】:

switchTo() 另一个窗口之前添加 ptor.ignoreSynchronization = truebrowser.ignoreSynchronization = true。 (将browser.ignoreSynchronization=true 用于browser 替换protractor.getInstance() 的新实现。Refer this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多