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

#java #webdriver #firefox4 #selenium-webdriver #browser-tab

#java #webdriver #firefox4 #selenium-webdriver #браузер-вкладка

Вопрос:

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

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

Комментарии:

1. Я подумал о решении с использованием JavaScript. Может быть, это самый простой способ?

2. Не могли бы вы поделиться этим решением? У меня такая же проблема.

3. Я не нашел решения. Кажется, что нет способа сделать это, смотрите Также принятый ответ.

Ответ №1:

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

Комментарии:

1. насколько я понял, этот метод позволяет обрабатывать только windows , не tabs

Ответ №2:

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

Комментарии:

1. Я боялся, что это будет ответом. Спасибо.

Ответ №3:

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

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

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

Ответ №4:

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

ВНИМАНИЕ! Убедитесь, что всегда выполняете действия 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();
  

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

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

Комментарии:

1. Хотел бы я помочь конкретно с w / FF, но, к сожалению, мы используем Chrome в качестве основного тестового браузера. Однако тот же общий метод должен работать для других с их соответствующими комбинациями клавиш.

2. Классная штука! Спасибо!

Ответ №5:

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

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

Я имитирую сочетание клавиш CMD W на Mac, чтобы закрыть вкладку, если вы используете 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:172282,n:!493964,n:502394,p_lbr_brands_browse-bin:Lytro")
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 для имитации взаимодействия с пользователем. Если вы используете только событие нажатия клавиши, это закроет все вкладки и окна WebDriver.

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