Selenium 2: открыть ссылку в новой вкладке и закрыть вкладки
Я хочу иметь возможность открыть ссылку в новой вкладке в Selenium 2. Также я хочу закрыть вкладку, когда я закончу взаимодействие со страницей. Как это возможно, если у меня есть WebElement
из <a>
тег?
Я использую Java API Selenium 2 с драйвером Firefox, работающим на Firefox 4.
6 ответов
На данный момент API Selenium WebDriver не имеет никакого способа обработки вкладок. Проекту действительно потребуется согласованный кросс-браузерный набор методов для управления вкладками, прежде чем я ожидаю увидеть реализацию в одной из языковых привязок, таких как Java. До тех пор ваше решение JavaScript может быть единственным способом, и помните, что ваш код будет отвечать за управление временем жизни этой вкладки.
Как я выяснил, для Selen 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.awt.robot. Вы можете отправить ключи, которые могут закрыть окно браузера. попробуйте использовать
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();
Примечание: я знаю, что это старая ветка, я просто хотел каталогизировать решение здесь, потому что я не мог найти более элегантное решение и хотел сэкономить кому-то еще немного времени (надеюсь:).
Изменить: опечатка
Я использую класс 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.
Надеюсь, я тебе помог.
Вот как я это сделал, используя Python.
Это решение немного грязное, но оно работает, если вы хотите закрыть вкладку.
Я имитирую ярлык Mac 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)