Есть ли способ закрыть вкладку в 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();
});
});
Ответы
Ответ 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]);