量角器(3.0.0)/ Webdriver(2.53.0)切换标签错误

时间:2016-04-12 16:22:21

标签: javascript selenium webdriver protractor

我对当前版本的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而不是标签的解决方法,不过我真的认为如果当前窗口句柄告诉你在你还在同一时间时已经切换了错误即可。

更新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中的测试也可以毫无问题地继续进行。所以这是一个较小的错误。

(相关链接:

  1. Protractor - switch tabs error - 不同情况
  2. https://github.com/angular/protractor/issues/55 - 多年前关闭
  3. https://github.com/angular/protractor/issues/3124 - 我的新错误报告)

1 个答案:

答案 0 :(得分:0)

从视觉上看,你会看到它切换到第二个标签,但你不会看到它切换回第一个标签(也许这是chrome或chromedriver中的错误?)。事实上,测试命令被发送到正确的选项卡,并且您的测试将正确通过或失败。