tab open new close java selenium firefox selenium-webdriver browser-tab

open - ¿Cómo abrir una nueva pestaña usando Selenium WebDriver con Java?



selenium python close tab (23)

¿Cómo abrir una nueva pestaña usando Selenium WebDriver con Java para 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);

El código anterior deshabilitará las primeras extensiones y se abrirá una nueva pestaña de clase de robot.

¿Cómo abrir una nueva pestaña en el navegador Firefox existente usando Selenium WebDriver (también conocido como Selenium 2)?


Cómo abrir uno nuevo, pero lo más importante, ¿cómo se hacen las cosas en esa nueva pestaña? Webdriver no agrega un nuevo WindowHandle para cada pestaña, y solo tiene control de la primera pestaña. Entonces, después de seleccionar una nueva pestaña (Control + Número de pestaña) configure .DefaultContent () en el controlador para definir la pestaña visible como la que va a trabajar.

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()


Debido a errores en https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 aunque webdriver.switchTo en realidad cambia de pestañas, el foco queda en la primera pestaña. Puede confirmarlo haciendo un controlador.get después de la ventana de cambio y ver que la segunda pestaña vaya realmente a la nueva URL y no a la pestaña original.

El trabajo por ahora es lo que sugirió @ yardening2. Use js para abrir una alerta y luego use webdriver para aceptarla.


El mismo ejemplo para nodejs:

var webdriver = require(''selenium-webdriver''); ... driver = new webdriver.Builder(). withCapabilities(capabilities). build(); ... driver.findElement(webdriver.By.tagName("body")).sendKeys(webdriver.Key.COMMAND + "t");


El siguiente código abrirá el enlace en la nueva pestaña.

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);

El siguiente código abrirá una nueva pestaña vacía.

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t"); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);


El siguiente código abrirá el enlace en una nueva ventana

String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN); driver.findElement(By.linkText("linkname")).sendKeys(selectAll);


Este código funciona para mí (selenio 3.8.1, cromedriver = 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(); }


Estoy usando Selenium 2.52.0 en Java y Firefox 44.0.2. Desafortunadamente ninguna de las soluciones anteriores funcionó para mí. El problema es si llamo driver.getWindowHandles () siempre obtengo 1 identificador único. De alguna manera, esto tiene sentido para mí, ya que Firefox es un proceso único y cada pestaña no es un proceso separado. Pero tal vez estoy equivocado. De todos modos, trato de escribir mi propia solución:

// 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);

Usé la combinación Ctrl + t para abrir una nueva pestaña, Ctrl + w para cerrarla, y para volver a la pestaña original utilicé Ctrl + 1 (la primera pestaña). Soy consciente de que la solución de la mina no es perfecta o incluso buena, y también me gustaría cambiar con el controlador para llamar, pero como escribí no fue posible, ya que solo tenía un identificador. Tal vez esto sea útil para alguien con la misma situación.


Manejo de la ventana del navegador usando 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


Para abrir una nueva pestaña en el navegador Chrome existente usando Selenium WebDriver puede usar este código:

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);


Para abrir una nueva ventana en Chrome Driver.

//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);

Para cambiar entre pestañas, lea aquí


Por qué no hacer esto

driver.ExecuteScript("window.open(''your url'',''_blank'');");


Pruebe esto para el navegador 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)); }


Puede usar el siguiente código usando Java con Selenium WebDriver:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");

Al usar JavaScript:

WebDriver driver = new FirefoxDriver();//FF or any other Driver JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.open()");


Solo para cualquier otra persona que esté buscando una respuesta en enlaces Ruby / Python / C # (Selenium 2.33.0).

Tenga en cuenta que las claves reales para enviar dependen de su sistema operativo, por ejemplo, Mac usa COMMAND + t , en lugar de CONTROL + t .

Rubí

require ''selenium-webdriver'' driver = Selenium::WebDriver.for :firefox driver.get(''http://.com/'') body = driver.find_element(:tag_name => ''body'') body.send_keys(:control, ''t'') driver.quit

Pitón

from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Firefox() driver.get("http://.com/") body = driver.find_element_by_tag_name("body") body.send_keys(Keys.CONTROL + ''t'') driver.close()

DO#

using OpenQA.Selenium; using OpenQA.Selenium.Firefox; namespace Tests { class OpenNewTab { static void Main(string[] args) { IWebDriver driver = new FirefoxDriver(); driver.Navigate().GoToUrl("http://.com/"); IWebElement body = driver.FindElement(By.TagName("body")); body.SendKeys(Keys.Control + ''t''); driver.Quit(); } } }


Tuve problemas para abrir una pestaña nueva en Chrome por un tiempo. Incluso driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); No funcionó para mí

Descubrí que no es suficiente que el selenio se concentre en el conductor, Windows también tiene que tener la ventana en el frente.

Mi solución fue invocar una alerta en Chrome que llevara la ventana al frente y luego ejecutara el comando. Código de muestra:

((JavascriptExecutor)driver).executeScript("alert(''Test'')"); driver.switchTo().alert().accept(); driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");


compruebe este ejemplo completo para saber cómo abrir varias pestañas y cambiar entre pestañas y al final cerrar todas las pestañas

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); } }

Este ejemplo está dado por esta página web


Para abrir una nueva pestaña en el navegador Firefox existente usando Selenium WebDriver

FirefoxDriver driver = new FirefoxDriver(); driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL,"t");


Pregunta : ¿Cómo abrir una nueva pestaña usando Selenium WebDriver con Java?

Respuesta : Después de hacer clic en cualquier enlace, abra una pestaña nueva.

Si queremos manejar una pestaña recién abierta, necesitamos manejar la pestaña usando el comando .switchTo (). Window ().

Cambie a una pestaña en particular, luego realice la operación y vuelva a la pestaña padre.

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)); } }


Actions at=new Actions(wd); at.moveToElement(we); at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();


//to open new tab in existing window driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");


driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles()); driver.switchTo().window(tabs.get(0));


driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");// open in new tab driver.get("ur link");