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

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

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

Ответ 1

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

Ответ 2

Как я понял, для селена 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

Ответ 3

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

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

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

Ответ 4

Пришло время (~ 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();

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

Изменить: Typo

Ответ 5

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

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

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

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)

Ответ 6

Я использую класс 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, чтобы имитировать взаимодействие пользователя. Если вы используете только событие keyPress, это закроет все вкладки и окна WebDriver.

Надеюсь, я помог тебе.