Как открыть новую вкладку с помощью Selenium WebDriver?
Как открыть новую вкладку в существующем браузере Firefox с помощью Selenium WebDriver (он же Selenium 2)?
24 ответа:
приведенный ниже код откроет ссылку в новой вкладке.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
код ниже откроет пустую новую вкладку.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t"); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
просто для тех, кто ищет ответ в привязках Ruby/Python/C# (Selenium 2.33.0).
обратите внимание, что фактические ключи для отправки зависят от вашей ОС, например, Mac использует
COMMAND + t
, вместоCONTROL + t
.Рубин
require 'selenium-webdriver' driver = Selenium::WebDriver.for :firefox driver.get('http://stackoverflow.com/') body = driver.find_element(:tag_name => 'body') body.send_keys(:control, 't') driver.quit
Python
from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://stackoverflow.com/") body = driver.find_element_by_tag_name("body") body.send_keys(Keys.CONTROL + 't') driver.close()
C#
using OpenQA.Selenium; using OpenQA.Selenium.Firefox; namespace StackOverflowTests { class OpenNewTab { static void Main(string[] args) { IWebDriver driver = new FirefoxDriver(); driver.Navigate().GoToUrl("http://stackoverflow.com/"); IWebElement body = driver.FindElement(By.TagName("body")); body.SendKeys(Keys.Control + 't'); driver.Quit(); } } }
попробуйте это для браузера FireFox.
/* Open new tab in browser */ public void openNewTab() { driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles()); driver.switchTo().window(tabs.get(0)); }
ниже кода откроется ссылка в новом окне
String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN); driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
чтобы открыть новое окно в драйвере Chrome.
//The script that will will open a new blank window //If you want to open a link new tab, replace 'about:blank' with a link String a = "window.open('about:blank','_blank');"; ((JavascriptExecutor)driver).executeScript(a);
вы можете использовать следующий код, используя Java с Selenium WebDriver:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
С помощью JavaScript:
WebDriver driver = new FirefoxDriver();//FF or any other Driver JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.open()");
чтобы открыть новую вкладку в существующем браузере Chrome с помощью Selenium WebDriver вы можете использовать этот код:
driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t"); string newTabInstance = driver.WindowHandles[driver.WindowHandles.Count-1].ToString(); driver.SwitchTo().Window(newTabInstance); driver.Navigate().GoToUrl(url);
Я использую Selenium 2.52.0 в Java и Firefox 44.0.2. К сожалению, ни одно из вышеперечисленных решений не сработало для меня. Проблема в том, что я звоню водителю.getWindowHandles () я всегда получаю 1 одну ручку. Почему-то это имеет смысл для меня, как Firefox-это один процесс и каждая вкладка отдельный процесс. Но может я ошибаюсь. Во всяком случае, я пытаюсь написать свое собственное решение:
// open a new tab driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); //url to open in a new tab String urlToOpen = "https://url_to_open_in_a_new_tab"; Iterator<String> windowIterator = driver.getWindowHandles() .iterator(); //I always get handlesSize == 1, regardless how many tabs I have int handlesSize = driver.getWindowHandles().size(); //I had to grab the original handle String originalHandle = driver.getWindowHandle(); driver.navigate().to(urlToOpen); Actions action = new Actions(driver); // close the newly opened tab action.keyDown(Keys.CONTROL).sendKeys("w").perform(); // switch back to original action.keyDown(Keys.CONTROL).sendKeys("1").perform(); //and switch back to the original handle. I am not sure why, but //it just did not work without this, like it has lost the focus driver.switchTo().window(originalHandle);
я использовал комбинацию Ctrl+t, чтобы открыть новую вкладку, Ctrl+w, чтобы закрыть ее, и вернуться к исходной вкладке, которую я использовал Ctrl+1 (первая вкладка). Я знаю, что мое решение не идеально или даже хорошо, и я также хотел бы переключиться с помощью вызова switchTo водителя, но, как я писал, это было невозможно, поскольку у меня была только одна ручка. Может быть, это будет полезно для кого-то с такой же ситуацией.
у меня были проблемы с открытием новой вкладки в chrome на некоторое время. Даже
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
не работает для меня.я узнал, что недостаточно того, что selenium фокусируется на драйвере, Windows также должна иметь окно спереди.
мое решение состояло в том, чтобы вызвать предупреждение в chrome, которое выведет окно вперед, а затем выполнит команду. пример кода:
((JavascriptExecutor)driver).executeScript("alert('Test')"); driver.switchTo().alert().accept(); driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
//to open new tab in existing window driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
Как открыть новую вкладку с помощью Selenium WebDriver с Java для chrome?
ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-extensions"); driver = new ChromeDriver(options); driver.manage().window().maximize(); driver.navigate().to("https://google.com"); Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.VK_T); robot.keyRelease(KeyEvent.VK_CONTROL); robot.keyRelease(KeyEvent.VK_T);
выше код отключит первые расширения и с помощью класса робота откроется новая вкладка.
тот же пример для nodejs:
var webdriver = require('selenium-webdriver'); ... driver = new webdriver.Builder(). withCapabilities(capabilities). build(); ... driver.findElement(webdriver.By.tagName("body")).sendKeys(webdriver.Key.COMMAND + "t");
Как открыть новый, но что еще более важно, как вы делаете вещи в этой новой вкладке? Webdriver не добавляет новый WindowHandle для каждой вкладки, а только имеет контроль над первой вкладкой. Итак, после выбора новой вкладки (Control + Tab Number) установите .DefaultContent () на драйвере, чтобы определить видимую вкладку Как Ту, над которой вы собираетесь работать.
Visual Basic
Dim driver = New WebDriver("Firefox", BaseUrl) ' Open new tab - send Control T Dim body As IWebElement = driver.FindElement(By.TagName("body")) body.SendKeys(Keys.Control + "t") ' Go to a URL in that tab driver.GoToUrl("YourURL") ' Assuming you have m tabs open, go to tab n by sending Control + n body.SendKeys(Keys.Control + n.ToString()) ' Now set the visible tab as the drivers default content. driver.SwitchTo().DefaultContent()
чтобы открыть новую вкладку в существующем браузере Firefox с помощью Selenium WebDriver в
FirefoxDriver driver = new FirefoxDriver(); driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL,"t");
Actions at=new Actions(wd); at.moveToElement(we); at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles()); driver.switchTo().window(tabs.get(0));
проверить этот пример, чтобы понять, как открыть несколько вкладок и переключаться между вкладками и в конце закрыть все вкладки
public class Tabs { WebDriver driver; Robot rb; @BeforeTest public void setup() throws Exception { System.setProperty("webdriver.chrome.driver", "C:\Users\Anuja.AnujaPC\Downloads\chromedriver_win32\chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get("http://qaautomated.com"); } @Test public void openTab() { //Open tab 2 using CTRL + t keys. driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); //Open URL In 2nd tab. driver.get("http://www.qaautomated.com/p/contact.html"); //Call switchToTab() method to switch to 1st tab switchToTab(); //Call switchToTab() method to switch to 2nd tab. switchToTab(); } public void switchToTab() { //Switching between tabs using CTRL + tab keys. driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t"); //Switch to current selected tab's content. driver.switchTo().defaultContent(); } @AfterTest public void closeTabs() throws AWTException { //Used Robot class to perform ALT + SPACE + 'c' keypress event. rb =new Robot(); rb.keyPress(KeyEvent.VK_ALT); rb.keyPress(KeyEvent.VK_SPACE); rb.keyPress(KeyEvent.VK_C); } }
этот пример приведен этой странице
из-за ошибки в https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 даже если webdriver.switchTo фактически переключает вкладки, фокус остается на первой вкладке. Вы можете подтвердить это, выполнив драйвер.получить после switchWindow и увидеть, что вторая вкладка на самом деле перейти на новый URL, а не на исходную вкладку.
работа вокруг на данный момент является то, что @yardening2 предложил. Используйте js, чтобы открыть предупреждение, а затем использовать webdriver, чтобы принять его.
этот код работает для меня (selenium 3.8.1, chromedriver=2.34.522940, chrome=63.0):
public void openNewTabInChrome() { driver.get("http://www.google.com"); WebElement element = driver.findElement(By.linkText("Gmail")); Actions actionOpenLinkInNewTab = new Actions(driver); actionOpenLinkInNewTab.moveToElement(element) .keyDown(Keys.CONTROL) // MacOS: Keys.COMMAND .keyDown(Keys.SHIFT).click(element) .keyUp(Keys.CONTROL).keyUp(Keys.SHIFT).perform(); ArrayList<String> tabs = new ArrayList(driver.getWindowHandles()); driver.switchTo().window(tabs.get(1)); driver.get("http://www.yahoo.com"); //driver.close(); }
вопрос : как открыть новую вкладку с помощью Selenium WebDriver с Java?
ответ : после нажатия на любую ссылку откройте новую вкладку.
Если мы хотим обрабатывать вновь открытую вкладку, то нам нужно обрабатывать вкладку с помощью .switchTo().окно() команда.
переключитесь на определенную вкладку, затем выполните операцию и вернитесь на родительскую вкладку.
package test; import java.util.ArrayList; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class Tab_Handle { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", "geckodriver_path"); WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com"); // Store all currently open tabs in Available_tabs ArrayList<String> Available_tabs = new ArrayList<String>(driver.getWindowHandles()); // Click on link to open in new tab driver.findElement(By.id("Url_Link")).click(); // Switch newly open Tab driver.switchTo().window(Available_tabs.get(1)); // Perform some operation on Newly open tab // Close newly open tab after performing some operations. driver.close(); // Switch to old(Parent) tab. driver.switchTo().window(Available_tabs.get(0)); } }
чтобы открыть новую вкладку с помощью JavascriptExecutor,
((JavascriptExecutor) driver).executeScript("window.open()"); ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles()); driver.switchTo().window(tabs.get(1));
будет контролировать на вкладке, как в соответствии с индексом:
driver.switchTo().window(tabs.get(1));
управление драйвером на главной вкладке:
driver.switchTo().window(tabs.get(0));
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");// open in new tab driver.get("ur link");
обработка окна браузера с помощью Selenium Webdriver:
String winHandleBefore = driver.getWindowHandle(); for(String winHandle : driver.getWindowHandles()) // Switch to new opened window { driver.switchTo().window(winHandle); } driver.switchTo().window(winHandleBefore); // move to previously opened window