it-swarm.com.de

So öffnen Sie eine neue Registerkarte mit Selenium WebDriver

So öffnen Sie eine neue Registerkarte im vorhandenen Firefox-Browser mit Selenium WebDriver (a.k.a. Selenium 2)?

82
Bhakti Shah

Der folgende Code öffnet den Link in einem neuen Tab.

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

Der folgende Code öffnet ein leeres neues Tab.

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

Nur für alle, die eine Antwort in Ruby/Python/C # -Bindungen (Selenium 2.33.0) suchen.

Beachten Sie, dass die tatsächlich zu sendenden Tasten von Ihrem Betriebssystem abhängen, beispielsweise verwendet Mac anstelle von COMMAND + tCONTROL + 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();
        }
    }
}
75
Yi Zeng

Warum machst du das nicht?

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

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

Zum Wechseln zwischen Registerkarten lesen Sie hier

5
Junaid Khan

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));
}
5
Prasanth RJ

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()");
4
Ripon Al Wasim

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

Um eine neue Registerkarte im vorhandenen Chrome-Browser mit Selenium WebDriver zu öffnen, können Sie diesen Code verwenden:

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

Ich hatte einige Zeit Probleme beim Öffnen eines neuen Tabs in chrome. Sogar driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); hat bei mir nicht funktioniert.

Ich fand heraus, dass es nicht genug ist, dass Selen auf den Treiber fokussiert ist, Windows muss auch das Fenster vorne haben.

Meine Lösung bestand darin, eine Warnung für 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");
2
yardening2

Diese Codezeile öffnet eine neue Browserregisterkarte mit Selenium Webdriver

((JavascriptExecutor)getDriver()).executeScript("window.open()");
1
khaleefa shaik
//to open new tab in existing window
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
1
mahi

So öffnen Sie eine neue Registerkarte mit dem JavascriptExecutor  

((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));

Wird auf der Registerkarte gemäß dem Index gesteuert: 

driver.switchTo().window(tabs.get(1));

Treibersteuerung auf der Hauptregisterkarte:

driver.switchTo().window(tabs.get(0));
1
Ishita Shah

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 driver.getWindowHandles () anrufe, bekomme ich immer 1 Single-Handle. Irgendwie macht das für mich Sinn, da Firefox ein einzelner Prozess ist und jeder Tab 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 wieder zur ursprünglichen Registerkarte zu wechseln, habe ich Strg + 1 (die erste Registerkarte) verwendet. Ich bin mir bewusst, dass meine Lösung nicht perfekt oder sogar gut ist, und ich möchte auch mit dem Schalter des Fahrers wechseln, aber als ich geschrieben habe, war es nicht möglich, da ich nur einen einzigen Griff hatte. Vielleicht ist dies für jemanden mit derselben Situation hilfreich. 

1
Gico

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

Mit dem obigen Code werden die ersten Erweiterungen deaktiviert, und mit der Roboterklasse wird eine neue Registerkarte geöffnet.

1
Nikhil Shah

Dieser Code funktioniert für mich (Selenium 3.8.1, Chromdriver = 2.34.522940, Chrom = 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();
}
0
Giang Phan

Frage : Wie öffne ich einen neuen Tab mit Selenium WebDriver mit Java?

Antwort : Nachdem Sie auf einen Link geklickt haben, öffnen Sie die neue Registerkarte.

Wenn wir mit neu geöffneten Registerkarten umgehen wollen, müssen wir die 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));

    }

}
0
sandeep shewale

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 langfristig andere Probleme bereiten.

0
Ardesco

in diesem vollständigen Beispiel erfahren Sie, wie Sie mehrere Registerkarten öffnen und 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 gegeben durch diese Webseite

0
anuja jain

So öffnen Sie eine neue Registerkarte im vorhandenen Firefox-Browser mit Selenium WebDriver

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

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());

driver.switchTo().window(tabs.get(0));
0
Rajan.M
 Actions at=new Actions(wd);
 at.moveToElement(we);
 at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
0
Alex Mathew

Gleiches Beispiel für nodejs:

var webdriver = require('Selenium-webdriver');
...
driver = new webdriver.Builder().
                    withCapabilities(capabilities).
                    build();
...

driver.findElement(webdriver.By.tagName("body")).sendKeys(webdriver.Key.COMMAND + "t");
0
gyss

Wie öffne ich einen neuen, aber was noch wichtiger ist, wie erledigt man das in diesem neuen Tab? Webdriver fügt kein neues WindowHandle für jede Registerkarte hinzu und hat nur die Kontrolle über die erste Registerkarte. Nachdem Sie eine neue Registerkarte (Control + Tab Number) ausgewählt haben, legen Sie .DefaultContent () im Treiber fest, um die sichtbare Registerkarte als diejenige 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()
0
BClaydon

Aufgrund eines Fehlers in https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 Obwohl webdriver.switchTo tatsächlich zwischen 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.

Umgehen Sie jetzt, was @ yardening2 vorgeschlagen hat. __ Verwenden Sie js, um eine Warnmeldung zu öffnen, und verwenden Sie dann einen Web-Treiber, um diese zu akzeptieren.

0
anilwanted