Selenium 2: открыть ссылку в новой вкладке и закрыть вкладки - PullRequest
13 голосов
/ 17 мая 2011

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

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

Ответы [ 6 ]

7 голосов
/ 25 апреля 2012

Как я выяснил для селена 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
6 голосов
/ 19 декабря 2012

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

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

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

6 голосов
/ 17 мая 2011

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

4 голосов
/ 12 января 2015

Мне потребовалось некоторое время (~ 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();

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

Редактировать: опечатка

3 голосов
/ 05 июля 2014

Я использую класс 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.

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

3 голосов
/ 06 декабря 2013

Вот как я это сделал, используя Python.

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

Я имитирую ярлык 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...