【发布时间】:2016-08-03 09:35:36
【问题描述】:
我对当前版本的 webdriver/protractor 进行了以下测试(参见标题)。
it('checks tabs', () => {
const url1 = 'https://stackoverflow.com/';
const url2 = 'http://programmers.stackexchange.com/';
let windowHandles = {
oldTab: '',
newTab: ''
};
await browser.get(url1);
await browser.getWindowHandle().then(handle => {
windowHandles.oldTab = handle;
});
await browser.executeScript('window.open("' + url2 + '", "whatever")');
await browser.getAllWindowHandles()
.then(handles => {
expect(handles[0]).toEqual(windowHandles.oldTab);
windowHandles.newTab = handles[1];
return browser.driver.switchTo().window(windowHandles.oldTab);
})
.then(() => {
let handle = browser.driver.getWindowHandle();
expect(handle).toEqual(windowHandles.oldTab);
})
.then(() => browser.sleep(6000));
});
有趣的是断言运行良好;它们都是绿色的。 但它不会切换回第一个选项卡。
是我遗漏了什么还是确实是一个错误?
更新
在我的 FireFox 中,window.open 打开一个窗口,而不是一个选项卡,并且实际上在窗口之间进行切换。
我可以接受在 Chrome 中打开窗口而不是标签的解决方法,但我真的认为,如果当前窗口句柄告诉您在您仍处于相同状态时已切换是 错误。
更新 2
即使打开窗口Chrome 也不会切换,而FireFox 会切换。我报告了一个错误。
这是我的新测试:
it('checks tabs', async () => {
const url1 = '/login';
const url2 = config.chatLaunchUrl;
let windowHandles = {
oldTab: '',
newTab: ''
};
await browser.get(url1);
await browser.getWindowHandle().then(handle => {
windowHandles.oldTab = handle;
});
// opening new window sending CTRL+N
await browser.actions()
.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "n"))
.perform();
await browser.getAllWindowHandles()
.then(handles => {
expect(handles[0]).toEqual(windowHandles.oldTab);
windowHandles.newTab = handles[1];
return browser.driver.switchTo().window(windowHandles.newTab);
})
.then(() => {
// this works
return browser.get(url2);
})
.then(() => {
return browser.driver.switchTo()
.window(windowHandles.oldTab)
.then(() => browser.driver.executeScript('window.focus();'));
})
.then(() => {
let handle = browser.driver.getWindowHandle();
expect(handle).toEqual(windowHandles.oldTab);
})
.then(() => browser.sleep(6000));
});
更新 3
Chrome 和 Firefox 之间的区别在于,如果我切换到 Firefox,浏览器窗口就会成为焦点,而使用 Chrome 则不会。在 Chrome 中测试也可以继续进行而不会出现问题。所以这是一个较小的错误。
(相关链接:
【问题讨论】:
-
即使我遇到了 Protractor 3.0+ 的问题,在标签之间切换和在 iframe 中导航。就我而言,除了使用睡眠之外,我找不到任何其他解决方案:(
标签: javascript selenium webdriver protractor