Come aprire una nuova scheda utilizzando il Selenio WebDriver?

Come aprire una nuova scheda in esistente browser Firefox utilizzando il Selenio WebDriver (un.k.un. Selenio 2)?

Che linguaggio di programmazione?
Io uso java. Ho ottenuto una soluzione “m_Driver.findElement(Da.cssSelector(“corpo”)).sendKeys(Chiavi.CONTROL +”t”);” e funziona tutto bene.
Sono poi in grado di controllare la nuova scheda? Selenio non ha il supporto per nuove schede (si tenta di aprire nuove finestre, invece). Vedere le mie risposte stackoverflow.com/questions/14550360/… e stackoverflow.com/questions/17225911/…. Che cosa stai cercando di realizzare?
Ho voluto copiare una parte di testo e quindi aprire una nuova scheda e incolla il testo stesso in una nuova scheda. Non ho provato a controllare la nuova scheda, ma funziona bene per quello che voglio ottenere.
Ho fatto la stessa cosa utilizzando GetText() di tale elemento, e poi ha fatto dei Driver.get(testo).

OriginaleL’autore Bhakti Shah | 2013-07-09

24 risposte

  1. 32

    Il codice riportato di seguito consente di aprire il link in una nuova Scheda.

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

    Il codice riportato di seguito verrà aperta nuova Scheda vuota.

    String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
    driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
    
    utilizzare i Tasti.COMANDO al posto delle Chiavi.CONTROLLO se si utilizza mac
    Questa soluzione sembra tutt’altro che ottimali, poiché dipende dalle specifiche del sistema operativo (e forse specifiche del browser) scorciatoie… almeno, se si utilizza qualcosa come JS window.open()ci si può aspettare di lavorare su più piattaforme e browser.

    OriginaleL’autore Nagaraju Jampani

  2. 70

    Solo per chiunque altro che sta cercando una risposta in Ruby/Python/C# associazioni (Selenio 2.33.0).

    Di notare che la vera chiave per inviare dipendono dal sistema operativo, per esempio, Mac utilizza COMMAND + tinvece di CONTROL + t.

    Ruby

    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();
            }
        }
    }
    come si fa a tornare alla scheda precedente?
    WebDriver in grado di gestire più di una scheda – semplice li considera come finestre distinte. Così hai solo bisogno di driver.switchTo().window(windowName); per accedere a una scheda o una finestra. Ovviamente, avete bisogno di tenere traccia di il nome della finestra(s) come normale per permettere il passaggio tra di loro.
    Le chiavi.COMANDO per farlo funzionare su Mac, Grazie
    Può spiegare perché sei il recupero di un elemento e l’Invio Ctrl-t per quell’elemento? Che non ha alcun senso … non si può “Ctrl+t su un elemento web”? Perché non solo di eseguire nuove Azioni(WebDriver) .SendKeys(Chiavi.Control + “w”) .Eseguire(); per Favore, qualcuno potrebbe spiegare?
    ChromeDriver bug modo CTRL+T da lavoro. È possibile utilizzare CTRL+LMB come una soluzione alternativa. Vedere code.google.com/p/chromedriver/issues/detail?id=903#c2 per il codice di esempio.

    OriginaleL’autore Yi Zeng

  3. 23

    Perché non farlo

    driver.ExecuteScript("window.open('your url','_blank');");
    
    la maggior parte popup blocker blocca questo tentativo
    probabilmente sicuro per i test in cui si ha il controllo delle impostazioni del browser
    probabilmente funziona alla grande. chromedriver sembra disattivare tutte le estensioni(ie. adblock)
    Le chiavi di invio metodo non funzionerà più per me dopo l’aggiornamento a Chrome 49.0.2623.75 m, e questo metodo funziona su che versione di Chrome.
    Se si desidera aprire una pagina vuota nella scheda, si potrebbe driver.ExecuteScript("window.open('about:blank','_blank');");

    OriginaleL’autore kernowcode

  4. 5

    Provare questo per il browser 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));
    }
    

    OriginaleL’autore Prasanth RJ

  5. 4

    Per aprire la nuova finestra di 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);
    

    Per passare tra le schede, Leggi qui

    OriginaleL’autore Junaid Khan

  6. 3

    Sotto il codice apre il link in una nuova finestra

    String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
    driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
    
    tipo oggetto ‘Chiavi’ non ha nessun attributo di ‘accordo’
    Io vedo che le Chiavi di classe (org.openqa.Selenio)

    OriginaleL’autore Nagaraju Jampani

  7. 3

    È possibile utilizzare il codice riportato di seguito utilizza Java con Selenio WebDriver:

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

    Utilizzando JavaScript:

    WebDriver driver = new FirefoxDriver();//FF or any other Driver
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    jse.executeScript("window.open()");
    
    Il funzionamento manuale Ctrl+T per aprire una nuova scheda è stata implementata qui
    Questo non è lavoro, aprendo nella stessa scheda !
    Questo non funziona per me
    Si può provare con il codice JS di cui sopra
    Chandra Shekhar: si Può, si prega di provare il mio codice JS di cui sopra?

    OriginaleL’autore Ripon Al Wasim

  8. 2

    Per aprire una nuova scheda in esistente browser Chrome utilizzando il Selenio WebDriver è possibile utilizzare questo codice:

    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);
    
    Sì, questo funziona bello aprire un nuovo url nella stessa scheda di url esistente, buono per un sacco di link di test, in quanto non utilizza un sacco di risorse.

    OriginaleL’autore user2000197

  9. 1

    Sto usando Selenio 2.52.0 in Java e Firefox 44.0.2. Purtroppo, nessuna delle soluzioni di cui sopra ha funzionato per me. Il problema è che se ho una chiamata driver.getWindowHandles() ho sempre 1 singola maniglia. In qualche modo questo ha senso per me Firefox è un processo unico e ogni scheda non è un processo separato. Ma forse ho sbagliato. Comunque provo a scrivere la mia soluzione:

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

    Ho usato Ctrl+t combinazione per aprire un nuovo tab, Ctrl+w per chiudere, e per tornare alla scheda originale ho usato Ctrl+1 (prima scheda). Sono consapevole che la mia soluzione non è perfetta o addirittura buona e vorrei anche passare con conducente switchTo chiamata, ma come ho scritto non era possibile in quanto ho avuto solo una maniglia. Forse questo sarà utile a qualcuno con la stessa situazione.

    OriginaleL’autore Gico

  10. 1

    Ho avuto problemi durante l’apertura di una nuova scheda in chrome per un po’.
    Anche driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); non ha funzionato per me.

    Ho scoperto che non è sufficiente che il selenio è messa a fuoco sul driver, Windows deve anche avere la finestra nella parte anteriore.

    La mia soluzione è stata quella di richiamare un avviso su chrome che vorresti portare la finestra di fronte e quindi eseguire il comando. codice di esempio:

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

    OriginaleL’autore yardening2

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

    OriginaleL’autore mahi

  12. 1

    Come aprire una nuova scheda utilizzando il Selenio WebDriver con Java per 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);
    

    Sopra codice disabilita primo estensioni e l’utilizzo di robot classe nuova scheda si aprirà.

    OriginaleL’autore Nikhil Shah

  13. 0

    Stesso esempio per nodejs:

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

    OriginaleL’autore gyss

  14. 0

    Come aprire una nuova, ma, cosa più importante, come si fa a fare cose in una nuova scheda? Webdriver non aggiungere un nuovo WindowHandle per ogni scheda, e ha solo il controllo della prima scheda. Così, dopo la selezione di una nuova scheda (Ctrl + Numero di Scheda).DefaultContent() il driver per definire la scheda visibile, come quello che si sta andando a fare il lavoro.

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

    OriginaleL’autore BClaydon

  15. 0

    Per aprire una nuova scheda in esistente browser Firefox utilizzando il Selenio WebDriver

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

    OriginaleL’autore vickisys

  16. 0
     Actions at=new Actions(wd);
     at.moveToElement(we);
     at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
    
    In futuro, fornire qualche spiegazione di testo con lo snippet di codice per rendere i tuoi post più facile da capire.

    OriginaleL’autore Alex Mathew

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

    OriginaleL’autore Rajan.M

  18. 0

    controllare questo esempio per capire come aprire più schede e passare tra le schede e alla fine chiudere tutte le schede

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

    Questo esempio è dato dalla questa pagina web

    OriginaleL’autore anuja jain

  19. 0

    A causa del bug in https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 anche se webdriver.switchTo effettivamente cambiare le schede, la messa a fuoco è a sinistra sulla prima scheda. Si può verificare facendo un driver.dopo il switchWindow e vedere che la seconda scheda, in realtà per il nuovo URL e non la scheda.

    Risolvere il problema per ora è che @yardening2 suggerito.
    Usare js per aprire un avviso e quindi utilizzare webdriver accettarlo.

    OriginaleL’autore anilwanted

  20. 0

    Questo codice funziona per me (selenio 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();
    }
    

    OriginaleL’autore Giang Phan

  21. 0

    Domanda : Come aprire una nuova scheda utilizzando il Selenio WebDriver con Java?

    Risposta : Dopo aver fatto clic su qualsiasi link apre una nuova scheda.

    Se si desidera gestire, aperto di recente scheda quindi abbiamo bisogno per gestire la scheda in uso .switchTo().finestra (e)
    comando.

    Passare alla particolare scheda, quindi eseguire l’operazione e tornare al padre tab.

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

    OriginaleL’autore sandeep shewale

  22. 0

    Per aprire una nuova scheda utilizzando JavascriptExecutor,

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

    Controllo sulla scheda, in quanto, secondo l’indice:

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

    Di controllo del Driver sulla scheda principale:

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

    OriginaleL’autore Ishita Shah

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

    OriginaleL’autore liki

  24. -1

    Trattamento finestra del browser utilizzando il Selenio 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
    
    Non riesce ad affrontare la questione. La risposta è di circa il passaggio ad uno già esistente finestra, OP chiesto come aprire uno nuovo.

    OriginaleL’autore Jainish Kapadia

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *