Bagaimana cara membuka tab baru di browser Firefox yang ada menggunakan Selenium WebDriver (alias Selenium 2)?
Bagaimana cara membuka tab baru di browser Firefox yang ada menggunakan Selenium WebDriver (alias Selenium 2)?
Jawaban:
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);
window.open()
, Anda dapat mengharapkannya berfungsi pada banyak platform / peramban.
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();
}
}
}
driver.switchTo().window(windowName);
mengakses tab atau jendela apa saja. Jelas, Anda harus melacak nama jendela seperti biasa untuk memungkinkan peralihan di antara mereka.
Mengapa tidak melakukan ini
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
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));
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.
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.
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);
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));
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));
}
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);
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
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);
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");
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.
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.
Baris kode ini akan membuka tab browser baru menggunakan selenium webdriver
((JavascriptExecutor)getDriver()).executeScript("window.open()");
*JAWA
Saya merekomendasikan untuk menggunakan JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
Impor berikut:
import org.openqa.selenium.JavascriptExecutor;
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()
Actions at=new Actions(wd);
at.moveToElement(we);
at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
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
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.
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();
}
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));
}
}
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.
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();
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