Comment ouvrir un nouvel onglet dans le navigateur Firefox existant à l'aide de Selenium WebDriver (alias Selenium 2)?
Comment ouvrir un nouvel onglet dans le navigateur Firefox existant à l'aide de Selenium WebDriver (alias Selenium 2)?
Réponses:
Le code ci-dessous ouvrira le lien dans le nouvel onglet.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Le code ci-dessous ouvrira un nouvel onglet vide.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
window.open()
, vous pouvez vous attendre à ce qu'il fonctionne sur de nombreuses plates-formes / navigateurs.
Juste pour tous ceux qui recherchent une réponse dans les liaisons Ruby / Python / C # (Selenium 2.33.0).
Notez que les clés réelles à envoyer dépendent de votre système d'exploitation, par exemple, Mac utilise COMMAND + t
, au lieu de CONTROL + t
.
Rubis
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();
}
}
}
driver.switchTo().window(windowName);
d'accéder à n'importe quel onglet ou fenêtre. De toute évidence, vous devez garder une trace du ou des noms de fenêtre comme d'habitude pour permettre de basculer entre eux.
Pourquoi ne pas faire ça
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
Pour ouvrir un nouvel onglet à l'aide de JavascriptExecutor,
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Contrôle sur l'onglet selon l'index:
driver.switchTo().window(tabs.get(1));
Contrôle du pilote sur l'onglet principal:
driver.switchTo().window(tabs.get(0));
driver.switchTo().window(tabs.get(1)); driver.get("https://www.stackoverflow.com"); Thread.sleep(2000); driver.switchTo().window(tabs.get(2)); driver.get("https://www.flipkart.com"); Thread.sleep(2000); driver.close(); driver.switchTo().window(tabs.get(1)); Thread.sleep(2000); driver.close(); driver.switchTo().window(tabs.get(0));
, J'ai essayé cela mais en sortant le tableau de l'exception liée, si vous connaissez une solution, veuillez me le faire savoir.
driver.switchTo().window(tabs.get(2));
, cela fonctionne bien ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");
mais je n'aurai aucun contrôle pour passer à Windows.
Pour ouvrir une nouvelle fenêtre dans le pilote 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);
Vous pouvez utiliser le code suivant en utilisant Java avec Selenium WebDriver:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
En utilisant JavaScript:
WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
Après avoir ouvert un nouvel onglet, il doit passer à cet onglet:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Essayez ceci pour le navigateur 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));
}
Le code ci-dessous ouvrira le lien dans une nouvelle fenêtre
String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
WebDriver prend désormais en charge l'ouverture des onglets:
browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
Ouvre un nouvel onglet. Ouvrir une fenêtre est en fait devenu le cas non standard:
browser.manage.new_window(:window)
L'onglet ou la fenêtre ne sera pas automatiquement focalisé. Pour y accéder:
browser.switch_to.window new_tab
Pour ouvrir un nouvel onglet dans le navigateur Chrome existant à l'aide de Selenium WebDriver, vous pouvez utiliser ce code:
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);
J'ai eu du mal à ouvrir un nouvel onglet dans Chrome pendant un moment. Même driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
n'a pas fonctionné pour moi.
J'ai découvert qu'il ne suffit pas que le sélénium se concentre sur le pilote, Windows doit également avoir la fenêtre à l'avant.
Ma solution était d'appeler une alerte sur chrome qui ramènerait la fenêtre au premier plan, puis exécuterait la commande. exemple de code:
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
J'utilise Selenium 2.52.0 dans Java et Firefox 44.0.2. Malheureusement, aucune des solutions ci-dessus n'a fonctionné pour moi. Le problème est que si j'appelle driver.getWindowHandles (), j'obtiens toujours une seule poignée. Cela a du sens pour moi car Firefox est un processus unique et chaque onglet n'est pas un processus distinct. Mais peut-être que je me trompe. Quoi qu'il en soit, j'essaye d'écrire ma propre solution:
// 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);
J'ai utilisé la combinaison Ctrl + t pour ouvrir un nouvel onglet, Ctrl + w pour le fermer et pour revenir à l'onglet d'origine, j'ai utilisé Ctrl + 1 (le premier onglet). Je suis conscient que ma solution n'est ni parfaite ni même bonne et j'aimerais aussi passer avec le commutateur du conducteur pour appeler, mais comme je l'ai écrit, ce n'était pas possible car je n'avais qu'une seule poignée. Peut-être que cela sera utile à quelqu'un avec la même situation.
Comment ouvrir un nouvel onglet en utilisant Selenium WebDriver avec Java pour 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);
Le code ci-dessus désactivera les premières extensions et le nouvel onglet en utilisant la classe de robot s'ouvrira.
Cette ligne de code ouvrira un nouvel onglet de navigateur à l'aide de sélénium webdriver
((JavascriptExecutor)getDriver()).executeScript("window.open()");
*JAVA
Je recommande d'utiliser JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
Après l'importation:
import org.openqa.selenium.JavascriptExecutor;
Comment ouvrir un nouveau, mais plus important encore, comment faites-vous des choses dans ce nouvel onglet? Webdriver n'ajoute pas de nouveau WindowHandle pour chaque onglet et ne contrôle que le premier onglet. Ainsi, après avoir sélectionné un nouvel onglet (Contrôle + Numéro de l'onglet), définissez .DefaultContent () sur le pilote pour définir l'onglet visible comme celui sur lequel vous allez travailler.
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()
Actions at=new Actions(wd);
at.moveToElement(we);
at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
consultez cet exemple complet pour comprendre comment ouvrir plusieurs onglets et basculer entre les onglets et à la fin fermer tous les onglets
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);
} }
Cet exemple est donné par cette page web
En raison d'un bug dans https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 même si webdriver.switchTo change réellement d'onglet, le focus est laissé sur le premier onglet. Vous pouvez le confirmer en faisant un driver.get après le switchWindow et voir que le deuxième onglet va réellement vers la nouvelle URL et non vers l'onglet d'origine.
Pour l'instant, c'est ce que @ yardening2 a suggéré. Utilisez js pour ouvrir une alerte, puis utilisez Webdriver pour l'accepter.
Ce code fonctionne pour moi (sélénium 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();
}
Question : Comment ouvrir un nouvel onglet à l'aide de Selenium WebDriver avec Java?
Réponse : Après avoir cliqué sur n'importe quel lien, ouvrez un nouvel onglet.
Si nous voulons gérer l'onglet nouvellement ouvert, nous devons gérer l'onglet en utilisant la commande .switchTo (). Window ().
Basculez vers un onglet particulier, puis effectuez l'opération et revenez à l'onglet parent.
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));
}
}
Selenium ne prend pas en charge l'ouverture de nouveaux onglets, il ne prend en charge que l'ouverture de nouvelles fenêtres. À toutes fins utiles, une nouvelle fenêtre est de toute façon fonctionnellement équivalente à un nouvel onglet.
Il existe divers hacks pour contourner le problème, mais ils vont vous causer d'autres problèmes à long terme.
Si vous souhaitez ouvrir le nouvel onglet, vous pouvez utiliser ceci
((JavascriptExecutor) getDriver()).executeScript("window.open()");
Si vous souhaitez ouvrir le lien depuis le nouvel onglet, vous pouvez utiliser ceci
avec JavascriptExecutor:
public void openFromNewTab(WebElement element){
((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
}
avec des actions:
WebElement element = driver.findElement(By.xpath("your_xpath"));
Actions actions = new Actions(driver);
actions.keyDown(Keys.LEFT_CONTROL)
.click(element)
.keyUp(Keys.LEFT_CONTROL)
.build()
.perform();
Gestion de la fenêtre du navigateur à l'aide de 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