Подтвердить что ты не робот

Есть ли способ закрыть вкладку в WebDriver или Protractor?

Есть ли способ физически закрыть вкладку через Protractor или WebDriver?

Я спрашиваю, потому что, хотя я знаю, как переключаться на вкладки программно, но он не выводит активную вкладку на передний план. Я не всегда могу сказать, что происходит в моих тестах E2E, которые запускаются на SauceLabs, потому что, когда я просматриваю экраны, он показывает вкладку, с которой я перемещался, а не активный.

Неужели я ошибаюсь?

it('should do something in the previous tab', function(done) {
    browser.getAllWindowHandles().then(function (handles) {
        browser.switchTo().window(handles[0]);
        // do something
        expect(something).toEqual(thisThing);
        done();
    });
});
4b9b3361

Ответ 1

Вы можете попробовать следующее:

Перейдите на новую открытую вкладку. Закройте текущие окна (в данном случае новую вкладку). Вернитесь в первое окно.

browser.getAllWindowHandles().then(function (handles) {
    browser.driver.switchTo().window(handles[1]);
    browser.driver.close();
    browser.driver.switchTo().window(handles[0]);
});

Ответ 2

Прежде всего, selenium не предоставляет надежного кросс-браузерного API для работы с вкладками браузера. Общим подходом к открытию или закрытию вкладки (определенно, не вполне достоверной) является вызов ярлыков браузера для Chrome:

  • открыть вкладку: CTRL/COMMAND + T
  • закрыть вкладку: CTRL/COMMAND + W

В транспортнике найдите элемент body и "отправьте ему ключи":

var body = element(by.tagName("body"));
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "t"))
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "w"))

Или, используя browser.actions():

browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('t').perform();
browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('w').perform();

Кроме того, чтобы открыть новую вкладку, есть интересный хак (представлен здесь), который в основном вводит новый элемент a на страницу и вызывает click событие мыши:

function openNewTab (url) {
    return browser.driver.executeScript(function(url) {(
        function(a, url){
            document.body.appendChild(a);
            a.setAttribute('href', url);
            a.dispatchEvent((function(e){
                e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
                return e;
            }(document.createEvent('MouseEvents'))))
        }(document.createElement('a'), url)
    );
    }, url)
};

Существует также функция window.close(), но она не закрывает вкладку, если она не была открыта через window.open() (ссылка). Другими словами, если это вкладка, которую вы открываете вручную, вы можете использовать подход window.open() -> window.close() с помощью browser.executeScript().

Ответ 3

С# Версия ответа Сакши:

   var tabs = driver.WindowHandles;
   if (tabs.Count > 1)
   {
       driver.SwitchTo().Window(tabs[1]);
       driver.Close();
       driver.SwitchTo().Window(tabs[0]);
   }

Ответ 4

Вы можете использовать driver.close а затем переключитесь на активную вкладку driver.SwitchTo().Window(m_driver.WindowHandles.First()); или любую другую доступную вкладку

Ответ 5

Я использую следующую команду, чтобы закрыть текущую вкладку после открытия ссылки на новой вкладке

Instance.Driver2.SwitchTo().Window(Instance.Driver2.WindowHandles[1]).Close();

Затем вы можете перейти на последнюю вкладку, выполнив команду:

Instance.Driver2.SwitchTo().Window(Instance.Driver2.WindowHandles[0]);