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.
надеюсь, я вам помог.