我对当前版本的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中打开Windows而不是标签的解决方法,不过我真的认为如果当前窗口句柄告诉你在你还在同一时间时已经切换了错误即可。
即使打开窗口,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));
});
Chrome和Firefox之间的区别在于,如果我切换到Firefox,浏览器窗口会成为焦点,而Chrome则不会。 Chrome中的测试也可以毫无问题地继续进行。所以这是一个较小的错误。
(相关链接:
答案 0 :(得分:0)
从视觉上看,你会看到它切换到第二个标签,但你不会看到它切换回第一个标签(也许这是chrome或chromedriver中的错误?)。事实上,测试命令被发送到正确的选项卡,并且您的测试将正确通过或失败。