Wie öffne ich mit Selenium WebDriver (auch bekannt als Selenium 2) einen neuen Tab im vorhandenen Firefox-Browser?
Wie öffne ich mit Selenium WebDriver (auch bekannt als Selenium 2) einen neuen Tab im vorhandenen Firefox-Browser?
Antworten:
Der folgende Code öffnet den Link in der neuen Registerkarte.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Der folgende Code öffnet einen leeren neuen Tab.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
window.open()
, können Sie davon ausgehen, dass sie auf vielen Plattformen / Browsern funktioniert.
Nur für alle anderen, die nach einer Antwort in Ruby / Python / C # -Bindungen suchen (Selenium 2.33.0).
Beachten Sie, dass die tatsächlich zu sendenden Schlüssel von Ihrem Betriebssystem abhängen, z. B. von Mac COMMAND + t
anstelle von CONTROL + t
.
Rubin
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);
auf eine Registerkarte oder ein Fenster zugreifen. Natürlich müssen Sie die Fensternamen wie gewohnt verfolgen, um zwischen ihnen wechseln zu können.
ActionChains(driver).key_down(Keys.CONTROL).click(element_to_be_clicked).key_up(Keys.CONTROL).perform()
. Die ActionChains werden aus importiert selenium.webdriver.common.action_chains
.
Warum nicht?
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
So öffnen Sie eine neue Registerkarte mit JavascriptExecutor:
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Steuert auf der Registerkarte gemäß Index:
driver.switchTo().window(tabs.get(1));
Treibersteuerung auf der Hauptregisterkarte:
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));
Ich habe dies versucht, aber das Array aus der gebundenen Ausnahme herausgeholt. Wenn Sie eine Lösung kennen, lassen Sie es mich bitte wissen.
driver.switchTo().window(tabs.get(2));
funktioniert dies einwandfrei, ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");
aber ich habe keine Kontrolle, um zu Windows zu wechseln.
So öffnen Sie ein neues Fenster in 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);
Sie können den folgenden Code mit Java mit Selenium WebDriver verwenden:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Mit JavaScript:
WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
Nach dem Öffnen der neuen Registerkarte muss zu dieser Registerkarte gewechselt werden:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Versuchen Sie dies für den FireFox-Browser.
/* 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));
}
Der folgende Code öffnet den Link in einem neuen Fenster
String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
WebDriver unterstützt jetzt das Öffnen von Registerkarten:
browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
Öffnet einen neuen Tab. Das Öffnen eines Fensters ist eigentlich zum Standard geworden:
browser.manage.new_window(:window)
Die Registerkarte oder das Fenster wird nicht automatisch fokussiert. Um dorthin zu wechseln:
browser.switch_to.window new_tab
Verwenden Sie diesen Code, um mit Selenium WebDriver einen neuen Tab im vorhandenen Chrome-Browser zu öffnen:
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);
Ich hatte eine Weile Probleme, einen neuen Tab in Chrom zu öffnen. Auch driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
hat bei mir nicht funktioniert.
Ich fand heraus, dass es nicht ausreicht, dass sich Selen auf den Treiber konzentriert, Windows muss auch das Fenster vorne haben.
Meine Lösung bestand darin, eine Warnung auf Chrome aufzurufen, die das Fenster nach vorne bringt und dann den Befehl ausführt. Beispielcode:
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Ich verwende Selenium 2.52.0 in Java und Firefox 44.0.2. Leider hat keine der oben genannten Lösungen für mich funktioniert. Das Problem ist, wenn ich einen Treiber aufrufe. GetWindowHandles () bekomme ich immer 1 einzelnes Handle. Irgendwie macht das für mich Sinn, da Firefox ein einzelner Prozess ist und jede Registerkarte kein separater Prozess ist. Aber vielleicht irre ich mich. Jedenfalls versuche ich meine eigene Lösung zu schreiben:
// 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);
Ich habe Strg + t-Kombination verwendet, um eine neue Registerkarte zu öffnen, Strg + w, um sie zu schließen, und um zur ursprünglichen Registerkarte zurückzukehren, habe ich Strg + 1 (die erste Registerkarte) verwendet. Mir ist bewusst, dass meine Lösung nicht perfekt oder sogar gut ist, und ich würde auch gerne mit dem Schalter switchTo des Fahrers wechseln, aber wie ich schrieb, war dies nicht möglich, da ich nur einen Griff hatte. Vielleicht ist dies für jemanden mit der gleichen Situation hilfreich.
Wie öffne ich einen neuen Tab mit Selenium WebDriver mit Java für 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);
Der obige Code deaktiviert die ersten Erweiterungen und die Verwendung der neuen Registerkarte "Roboterklasse" wird geöffnet.
Diese Codezeile öffnet eine neue Browser-Registerkarte mit dem Selenium-Webdriver
((JavascriptExecutor)getDriver()).executeScript("window.open()");
*JAVA
Ich empfehle zu verwenden JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
Nach dem Import:
import org.openqa.selenium.JavascriptExecutor;
Wie öffne ich eine neue, aber was noch wichtiger ist, wie machst du Sachen in dieser neuen Registerkarte? Webdriver fügt nicht für jede Registerkarte ein neues WindowHandle hinzu und hat nur die Kontrolle über die erste Registerkarte. Nachdem Sie eine neue Registerkarte (Strg + Tab-Nummer) ausgewählt haben, setzen Sie .DefaultContent () auf den Treiber, um die sichtbare Registerkarte als die zu definieren, an der Sie arbeiten werden.
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();
In diesem vollständigen Beispiel erfahren Sie, wie Sie mehrere Registerkarten öffnen, zwischen den Registerkarten wechseln und am Ende alle Registerkarten schließen
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);
} }
Dieses Beispiel wird von dieser Webseite gegeben
Aufgrund eines Fehlers in https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 , obwohl webdriver.switchTo tatsächlich die Registerkarten wechselt, bleibt der Fokus auf der ersten Registerkarte. Sie können dies bestätigen, indem Sie nach dem switchWindow ein driver.get ausführen und feststellen, dass die zweite Registerkarte tatsächlich zur neuen URL und nicht zur ursprünglichen Registerkarte wechselt.
Im Moment herumarbeiten ist das, was @ yardening2 vorgeschlagen hat. Verwenden Sie js, um eine Warnung zu öffnen, und verwenden Sie dann den Webdriver, um sie zu akzeptieren.
Dieser Code funktioniert für mich (Selen 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();
}
Frage : Wie öffne ich einen neuen Tab mit Selenium WebDriver mit Java?
Antwort : Nachdem Sie auf einen Link geklickt haben, öffnen Sie einen neuen Tab.
Wenn wir neu geöffnete Registerkarten verarbeiten möchten, müssen wir Registerkarten mit dem Befehl .switchTo (). Window () behandeln.
Wechseln Sie zu einer bestimmten Registerkarte, führen Sie dann den Vorgang aus und wechseln Sie zurück zur übergeordneten Registerkarte.
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));
}
}
Selen unterstützt nicht das Öffnen neuer Registerkarten, sondern nur das Öffnen neuer Fenster. In jeder Hinsicht entspricht ein neues Fenster einer neuen Registerkarte.
Es gibt verschiedene Hacks, um das Problem zu umgehen, aber sie werden Ihnen auf lange Sicht andere Probleme bereiten.
Wenn Sie die neue Registerkarte öffnen möchten, können Sie diese verwenden
((JavascriptExecutor) getDriver()).executeScript("window.open()");
Wenn Sie den Link über die neue Registerkarte öffnen möchten, können Sie diese verwenden
mit JavascriptExecutor:
public void openFromNewTab(WebElement element){
((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
}
mit Aktionen:
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();
Umgang mit dem Browserfenster mit 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