我已经尽可能多地思考这个问题了,但仍然无法使其发挥作用。我试图切换到popUp作为自动登录的方法。 (Protractor只是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
如你所见,我有两个断言:
定义了popUpHandle
switchTo后的句柄与popUpHandle
相同我测试过我总共有2个手柄。我测试过它们都是字符串。我测试过它们彼此不同。在这个例子中,我测试了popUpHandle的定义。所有那些测试通过。然而,无论我做什么,当我尝试将句柄插入.switchTo()。window()方法时,我得到相同的“nameOrHandle未定义”。
我很难过。关于WebDriverjs的文档很少,我甚至无法确定是否实现了switchTo。有谁知道这里发生了什么?
感谢。
答案 0 :(得分:0)
在ptor.ignoreSynchronization = true
其他窗口之前添加browser.ignoreSynchronization = true
或switchTo()
。 (使用browser.ignoreSynchronization=true
进行browser
取代protractor.getInstance()
的新实施。Refer this link)