Selenium 2: Открыть ссылку в новой вкладке и закрыть вкладки

Я хочу иметь возможность открыть ссылку на новой вкладке в Selenium 2. Также я хочу закрыть вкладку, когда закончу взаимодействие со страницей. Как это возможно, если у меня есть WebElement на <a> тег?

Я использую Java API Selenium 2 с драйвером Firefox, работающим на Firefox 4.

6 ответов


на данный момент, Selenium WebDriver API не имеет никакого способа обработки вкладок. Проект действительно нуждается в согласованном, кросс-браузерном наборе методов для управления вкладками, прежде чем я ожидаю увидеть реализацию в одной из языковых Привязок, таких как Java. До тех пор ваше решение JavaScript может быть единственным способом и помните, что ваш код будет отвечать за управление временем жизни этой вкладки.


то, как я понимаю для selenium 2, отлично работает для Chrome и firefox, IE имеет проблему проверки безопасности:

Set<String> winSet = webDriver.getWindowHandles();
List<String> winList = new ArrayList<String>(winSet);
String newTab = winList.get(winList.size() - 1);
webDriver.close(); // close the original tab
webDriver.switchTo().window(newTab); // switch to new tab

чтобы использовать селен в лучшем случае, мы в sol-logics объединяем его с java.ОУ.класс роботов. вы можете отправить ключи, которые могут закрыть окно браузера. попробуйте использовать

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);

и ответ, если он работает


потребовалось некоторое время (~2 недели) для меня, чтобы отследить правильную последовательность команд, но это, безусловно, самый простой метод, который я нашел для настройки Win7/Chrome, чтобы открыть ссылку на новой вкладке и автоматически переключиться на новую вкладку.

внимание! Обязательно всегда выполняйте действия keyUp. Если вы не выполните keyUp ваша система будет держать эти клавиши нажатой до перезагрузки или keyUp происходит.

Windows 7 / Chrome:

WebElement elem = driver.findElement(By.linkText("MyLinkText"));

// Chrome key combos:
//   SHIFT + CTRL + click = Open in new tab (and switch to new tab)
//   SHIFT + CTRL + RETURN = Open in new tab (in background)
Actions act = new Actions(driver);
act.keyDown(Keys.LEFT_CONTROL).keyDown(Keys.LEFT_SHIFT).perform();

// Wrap in a try/catch during implementation to ensure you perform keyUp(s).
elem.click();

act.keyUp(Keys.LEFT_CONTROL).keyDown(Keys.LEFT_SHIFT).perform();

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

Edit: Typo


вот как я это сделал с помощью Python.

это решение немного грязное, но оно работает, если вы хотите закрыть вкладку.

Im имитируя ярлык Mac CMD + W, чтобы закрыть вкладку, если вы используете windows, вам может потребоваться реализовать другую комбинацию клавиш.

import from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.amazon.com/gp/search/ref=sr_in_-2_p_lbr_brands_browse-_2895?rh=n%3A172282%2Cn%3A!493964%2Cn%3A502394%2Cp_lbr_brands_browse-bin%3ALytro")
action_chains = ActionChains(driver)
action_chains.key_down(Keys.COMMAND + "w")
action_chains.perform()
action_chains.key_up(Keys.COMMAND + "w")
driver.implicitly_wait(5)

Я использую класс Robor.

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_W);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_W);

Это заставляет робота быстро нажимать и отпускать клавиши CTRL + W для имитации взаимодействия с пользователем. Если вы используете только событие нажатия клавиши, это закроет все вкладки и окна WebDriver.

надеюсь, я вам помог.