【问题标题】:Protractor (3.0.0)/Webdriver (2.53.0) switching tabs errorProtractor (3.0.0)/Webdriver (2.53.0) 切换标签错误
【发布时间】: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 中测试也可以继续进行而不会出现问题。所以这是一个较小的错误。


(相关链接:

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

【问题讨论】:

  • 即使我遇到了 Protractor 3.0+ 的问题,在标签之间切换和在 iframe 中导航。就我而言,除了使用睡眠之外,我找不到任何其他解决方案:(

标签: javascript selenium webdriver protractor


【解决方案1】:

在视觉上,您会看到它切换到第二个选项卡,但您不会看到它切换回第一个选项卡(也许这是 chrome 或 chromedriver 中的错误?)。测试命令实际上已发送到正确的选项卡,您的测试将适当地通过或失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-27
    • 2018-01-28
    • 1970-01-01
    • 2014-04-15
    • 2016-03-27
    • 2020-02-18
    • 1970-01-01
    • 2013-06-13
    相关资源
    最近更新 更多