Bagaimana cara membuka tab baru menggunakan Selenium WebDriver?

114

Bagaimana cara membuka tab baru di browser Firefox yang ada menggunakan Selenium WebDriver (alias Selenium 2)?

Bhakti Shah
sumber
Bahasa pemrograman apa yang kamu gunakan?
alecxe
2
Saya menggunakan java. Saya mendapat satu solusi "m_Driver.findElement (By.cssSelector (" body ")). SendKeys (Keys.CONTROL +" t ");" dan bekerja dengan sangat baik.
Bhakti Shah
Apakah Anda kemudian dapat mengontrol tab baru? Selenium tidak mendukung tab baru (malah mencoba membuka jendela baru). Lihat jawaban saya stackoverflow.com/questions/14550360/… dan stackoverflow.com/questions/17225911/… . Apa sebenarnya yang ingin Anda capai?
Petr Janeček
Saya ingin menyalin beberapa teks dan kemudian membuka tab baru dan menempelkan teks yang sama di tab baru. Saya belum mencoba untuk mengontrol tab baru tetapi berfungsi dengan baik untuk apa yang ingin saya capai.
Bhakti Shah
Saya melakukan hal yang sama dengan menggunakan GetText () dari elemen itu dan kemudian melakukan Driver.get (teks).
Bhakti Shah

Jawaban:

53

Kode di bawah ini akan membuka tautan di Tab baru.

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

Kode di bawah ini akan membuka Tab baru yang kosong.

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Nagaraju Jampani
sumber
7
gunakan Keys.COMMAND daripada Keys.CONTROL jika Anda menggunakan mac
nanospeck
2
Solusi ini tampaknya kurang optimal karena bergantung pada pintasan khusus OS (dan mungkin khusus peramban) ... Setidaknya, jika Anda menggunakan sesuatu seperti JS window.open(), Anda dapat mengharapkannya berfungsi pada banyak platform / peramban.
mkasberg
86

Hanya untuk orang lain yang mencari jawaban dengan pengikatan Ruby / Python / C # (Selenium 2.33.0).

Perhatikan bahwa kunci sebenarnya untuk mengirim bergantung pada OS Anda, misalnya, Mac menggunakan COMMAND + t, bukan CONTROL + t.

Rubi

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();
        }
    }
}
Yi Zeng
sumber
3
bagaimana Anda kembali ke tab sebelumnya?
lurscher
11
WebDriver dapat menangani lebih dari satu tab - dengan sederhana memperlakukannya sebagai jendela terpisah. Jadi, Anda hanya perlu driver.switchTo().window(windowName);mengakses tab atau jendela apa saja. Jelas, Anda harus melacak nama jendela seperti biasa untuk memungkinkan peralihan di antara mereka.
Mark Rowlands
1
Bisakah Anda menjelaskan mengapa Anda mengambil elemen dan Mengirim Ctrl-t ke elemen itu? Itu tidak masuk akal ... Anda tidak bisa "Ctrl + t pada elemen web"? Mengapa tidak menjalankan Actions baru (WebDriver) .SendKeys (Keys.Control + "w") .Perform (); Tolong bisakah seseorang menjelaskan?
Brondahl
1
Ini tidak berhasil untuk saya. Saya telah mencoba beberapa cara menekan ctrl + t, tidak ada yang berhasil membuka tab baru.
Thayne
4
@Thayne bug ChromeDriver mencegah CTRL + T bekerja. Anda dapat menggunakan CTRL + LMB sebagai solusinya. Lihat code.google.com/p/chromedriver/issues/detail?id=903#c2 untuk kode contoh.
Gili
34

Mengapa tidak melakukan ini

driver.ExecuteScript("window.open('your url','_blank');");
kernowcode.dll
sumber
kebanyakan pemblokir popup akan memblokir upaya ini
Bert Lamb
1
mungkin aman untuk pengujian di mana Anda mengendalikan pengaturan browser Anda
kernowcode
1
mungkin akan bekerja dengan baik. chromedriver tampaknya menonaktifkan semua ekstensi (mis. adblock)
Josh O'Bryan
4
Metode kirim kunci tidak lagi berfungsi untuk saya setelah diperbarui ke Chrome 49.0.2623.75m, dan metode ini berfungsi pada versi Chrome tersebut.
Steven
6
Jika Anda ingin membuka halaman kosong di tab, Anda bisadriver.ExecuteScript("window.open('about:blank','_blank');");
Steven
12

Untuk membuka tab baru menggunakan JavascriptExecutor,

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

Akan mengontrol tab sesuai dengan indeks:

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

Kontrol pengemudi di tab utama:

driver.switchTo().window(tabs.get(0));
Ishita Shah
sumber
Bagaimana kalau meluncurkan 3 URL,? 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));, Saya telah mencoba ini tetapi mendapatkan array dari pengecualian terikat, Jika Anda tahu solusi apapun tolong beritahu saya.
cruisepandey
Ini bekerja sama untuk tab ke-3 juga. Bolehkah saya tahu di mana tepatnya pengecualian dilempar (Saat driver tutup)?
Ishita Shah
Tidak, pada baris ini driver.switchTo().window(tabs.get(2));, Ini berfungsi dengan baik ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");tetapi saya tidak akan memiliki kendali untuk beralih ke windows.
cruisepandey
9

Untuk membuka jendela baru di Driver 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);

Untuk beralih antar tab, Baca di sini

Junaid Khan
sumber
8

Anda dapat menggunakan kode berikut menggunakan Java dengan Selenium WebDriver:

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

Dengan menggunakan JavaScript:

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

Setelah membuka tab baru, perlu beralih ke tab itu:

ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Ripon Al Wasim
sumber
Operasi manual Ctrl + T untuk membuka tab baru telah diterapkan di sini
Ripon Al Wasim
@ Chandra Shekhar: Bisakah Anda mencoba kode JS saya di atas?
Ripon Al Wasim
@ Shivam: Terima kasih banyak. Senang mendengarnya karena kode itu berfungsi.
Ripon Al Wasim
5

Coba ini untuk 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));
}
Prasanth RJ
sumber
3

Kode di bawah ini akan membuka tautan di jendela baru

String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
Nagaraju Jampani
sumber
1
objek tipe 'Keys' tidak memiliki atribut 'chord'
Robino
@Bayu_joo Saya melihatnya di kelas Keys (org.openqa.Selenium)
MrBCut
3

Hampir semua jawaban di sini sudah ketinggalan zaman.

WebDriver sekarang memiliki dukungan untuk membuka tab:

browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window

Akan membuka tab baru. Membuka jendela sebenarnya telah menjadi kasus non-standar:

browser.manage.new_window(:window)

Tab atau jendela tidak akan otomatis difokuskan. Untuk beralih ke sana:

browser.switch_to.window new_tab
Matthias Winkelmann
sumber
2

Untuk membuka tab baru di browser Chrome yang ada menggunakan Selenium WebDriver Anda dapat menggunakan kode ini:

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);
pengguna2000197
sumber
Ya, ini berfungsi dengan baik, buka url baru di tab yang sama dengan url yang ada, bagus untuk banyak pengujian tautan karena tidak menggunakan banyak sumber daya.
John Peters
2

Saya mengalami kesulitan membuka tab baru di chrome untuk sementara waktu. Bahkan driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");tidak berhasil untukku.

Saya menemukan bahwa selenium tidak cukup hanya fokus pada driver, Windows juga harus memiliki jendela di bagian depan.

Solusi saya adalah meminta peringatan di chrome yang akan membawa jendela ke depan dan kemudian menjalankan perintah. Kode sampel:

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

Saya menggunakan Selenium 2.52.0 di Java dan Firefox 44.0.2. Sayangnya tidak ada solusi di atas yang berhasil untuk saya. Masalahnya adalah jika saya memanggil driver.getWindowHandles () saya selalu mendapatkan 1 pegangan tunggal. Entah bagaimana ini masuk akal bagi saya karena Firefox adalah proses tunggal dan setiap tab bukanlah proses yang terpisah. Tapi mungkin saya salah. Bagaimanapun saya mencoba menulis solusi saya sendiri:

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

Saya menggunakan kombinasi Ctrl + t untuk membuka tab baru, Ctrl + w untuk menutupnya, dan untuk beralih kembali ke tab asli saya menggunakan Ctrl + 1 (tab pertama). Saya sadar bahwa solusi saya tidak sempurna atau bahkan bagus dan saya juga ingin beralih dengan panggilan switchTo driver, tetapi ketika saya menulis itu tidak mungkin karena saya hanya memiliki satu pegangan. Mungkin ini akan membantu seseorang dengan situasi yang sama.

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

Bagaimana cara membuka tab baru menggunakan Selenium WebDriver dengan Java untuk 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);

Kode di atas akan menonaktifkan ekstensi pertama dan menggunakan tab baru kelas robot akan terbuka.

Nikhil Shah
sumber
1

Baris kode ini akan membuka tab browser baru menggunakan selenium webdriver

((JavascriptExecutor)getDriver()).executeScript("window.open()");
khaleefa shaik
sumber
Ketika saya menjalankan kode di atas, di chrome itu membuka tab baru. Namun di firefox jendela baru dibuka. Dalam kedua kasus penangan jendela berbeda untuk yang baru dibuka. Jadi menurut saya tab kurang lebih sama dengan jendela. Tentu saja, jendela penyamaran jelas berbeda dari tab jendela biasa.
MamathaMacherla
1

*JAWA

Saya merekomendasikan untuk menggunakan JavascriptExecutor:

  • Buka jendela kosong baru:
((JavascriptExecutor) driver).executeScript("window.open()");
  • Buka jendela baru dengan url tertentu:
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");

Impor berikut:

import org.openqa.selenium.JavascriptExecutor;
frianH
sumber
0

Contoh yang sama untuk nodejs:

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

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

Bagaimana cara membuka yang baru, tetapi yang lebih penting, bagaimana Anda melakukan sesuatu di tab baru itu? Webdriver tidak menambahkan WindowHandle baru untuk setiap tab, dan hanya memiliki kontrol atas tab pertama. Jadi, setelah memilih tab baru (Control + Tab Number), set .DefaultContent () pada driver untuk menentukan tab yang terlihat sebagai yang akan Anda kerjakan.

Dasar visual

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()
BClaydon
sumber
0

Untuk membuka tab baru di browser Firefox yang ada menggunakan Selenium WebDriver

FirefoxDriver driver = new FirefoxDriver();
driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL,"t"); 
vickisys
sumber
0
 Actions at=new Actions(wd);
 at.moveToElement(we);
 at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
Alex Mathew
sumber
Kedepannya, berikan beberapa teks penjelasan bersama dengan potongan kode agar postingan Anda lebih mudah dipahami.
Tyler Jandreau
0
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");

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

driver.switchTo().window(tabs.get(0));
Rajan.M
sumber
0

periksa contoh lengkap ini untuk memahami cara membuka banyak tab dan beralih di antara tab dan pada akhirnya tutup semua tab

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

Contoh ini diberikan oleh halaman web ini

anuja jain
sumber
0

Karena bug di https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 meskipun webdriver.switchTo benar-benar beralih tab, fokusnya ditinggalkan di tab pertama. Anda dapat mengkonfirmasi ini dengan melakukan driver.get setelah switchWindow dan melihat bahwa tab kedua benar-benar menuju ke URL baru dan bukan tab asli.

Bekerja untuk saat ini adalah apa yang disarankan @ yardening2. Gunakan js untuk membuka peringatan dan kemudian gunakan webdriver untuk menerimanya.

anilwanted
sumber
0

Kode ini berfungsi untuk saya (selenium 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();
}
Giang Phan
sumber
0

Pertanyaan : Bagaimana cara membuka tab baru menggunakan Selenium WebDriver dengan Java?

Jawaban : Setelah mengklik link apapun, buka tab baru.

Jika kita ingin menangani tab yang baru dibuka maka kita harus menangani tab menggunakan perintah .switchTo (). Window ().

Beralih ke tab tertentu kemudian lakukan operasi dan beralih kembali ke tab induk.

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

    }

}
sandeep shewale
sumber
0

Selenium tidak mendukung pembukaan tab baru, ini hanya mendukung pembukaan jendela baru. Untuk semua maksud, sebuah jendela baru secara fungsional sama dengan tab baru.

Ada berbagai peretasan untuk mengatasi masalah ini tetapi mereka akan menyebabkan masalah lain bagi Anda dalam jangka panjang.

Ardesco
sumber
0

Jika Anda ingin membuka tab baru, Anda dapat menggunakan ini

 ((JavascriptExecutor) getDriver()).executeScript("window.open()");

Jika Anda ingin membuka tautan dari tab baru, Anda dapat menggunakan ini

dengan JavascriptExecutor:

 public void openFromNewTab(WebElement element){
            ((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
        }

dengan Tindakan:

 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();
Norayr Sargsyan
sumber
-1
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");// open in new tab
driver.get("ur link");
liki
sumber
-1

Menangani jendela browser menggunakan 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
Jainish Kapadia
sumber
Gagal menjawab pertanyaan itu. Jawaban Anda adalah tentang beralih ke jendela yang sudah ada, OP bertanya bagaimana membuka yang baru.
Thomas Hirsch