Làm cách nào để mở một tab mới trong trình duyệt Firefox hiện có bằng Selenium WebDriver (hay còn gọi là Selenium 2)?
Làm cách nào để mở một tab mới trong trình duyệt Firefox hiện có bằng Selenium WebDriver (hay còn gọi là Selenium 2)?
Câu trả lời:
Đoạn mã dưới đây sẽ mở liên kết trong Tab mới.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Đoạn mã dưới đây sẽ mở Tab mới trống.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
window.open()
, bạn có thể mong đợi nó hoạt động trên nhiều nền tảng / trình duyệt.
Chỉ dành cho bất kỳ ai khác đang tìm kiếm câu trả lời trong các ràng buộc Ruby / Python / C # (Selenium 2.33.0).
Lưu ý rằng các khóa thực sự để gửi phụ thuộc vào hệ điều hành của bạn, chẳng hạn như Mac sử dụng COMMAND + t
thay vì 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();
}
}
}
driver.switchTo().window(windowName);
truy cập vào bất kỳ tab hoặc cửa sổ nào. Rõ ràng, bạn cần theo dõi (các) tên cửa sổ như bình thường để cho phép chuyển đổi giữa chúng.
ActionChains(driver).key_down(Keys.CONTROL).click(element_to_be_clicked).key_up(Keys.CONTROL).perform()
. Các ActionChains được nhập khẩu từ selenium.webdriver.common.action_chains
.
Tại sao không làm điều này
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
Để mở tab mới bằng JavascriptExecutor,
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Sẽ kiểm soát trên tab theo chỉ mục:
driver.switchTo().window(tabs.get(1));
Kiểm soát trình điều khiển trên tab chính:
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));
, Tôi đã thử điều này nhưng nhận được mảng ra khỏi ngoại lệ bị ràng buộc, Nếu bạn biết bất kỳ giải pháp nào, hãy cho tôi biết.
driver.switchTo().window(tabs.get(2));
, Điều này hoạt động tốt ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");
nhưng tôi sẽ không có bất kỳ điều khiển nào để chuyển sang cửa sổ.
Để mở cửa sổ mới trong Trình điều khiển 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);
Bạn có thể sử dụng mã sau bằng Java với Selenium WebDriver:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Bằng cách sử dụng JavaScript:
WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
Sau khi mở tab mới, nó cần chuyển sang tab đó:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Hãy thử điều này cho trình duyệt 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));
}
Mã dưới đây sẽ mở liên kết trong cửa sổ mới
String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
WebDriver hiện đã hỗ trợ mở các tab:
browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
Sẽ mở một tab mới. Mở cửa sổ đã thực sự trở thành trường hợp không chuẩn:
browser.manage.new_window(:window)
Tab hoặc cửa sổ sẽ không tự động được lấy tiêu điểm. Để chuyển sang nó:
browser.switch_to.window new_tab
Để mở tab mới trong trình duyệt Chrome hiện có bằng Selenium WebDriver, bạn có thể sử dụng mã này:
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);
Tôi đã gặp sự cố khi mở tab mới trong chrome trong một thời gian. Thậm chí driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
không làm việc cho tôi.
Tôi phát hiện ra rằng việc selen tập trung vào trình điều khiển là chưa đủ, Windows còn phải có cửa sổ ở phía trước.
Giải pháp của tôi là gọi một cảnh báo trên chrome sẽ đưa cửa sổ lên phía trước và sau đó thực thi lệnh. mã mẫu:
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Tôi đang sử dụng Selenium 2.52.0 trong Java và Firefox 44.0.2. Thật không may, không có giải pháp nào ở trên làm việc cho tôi. Vấn đề là nếu tôi gọi driver.getWindowHandles (), tôi luôn nhận được 1 xử lý duy nhất. Bằng cách nào đó, điều này có ý nghĩa với tôi vì Firefox là một quá trình duy nhất và mỗi tab không phải là một quá trình riêng biệt. Nhưng có lẽ tôi đã nhầm. Nhưng dù sao tôi cũng cố gắng viết giải pháp của riêng mình:
// 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);
Tôi đã sử dụng tổ hợp Ctrl + t để mở tab mới, Ctrl + w để đóng và để chuyển về tab ban đầu, tôi đã sử dụng Ctrl + 1 (tab đầu tiên). Tôi biết rằng giải pháp của tôi không hoàn hảo hoặc thậm chí là tốt và tôi cũng muốn chuyển sang công tắc của trình điều khiển Để cuộc gọi, nhưng như tôi đã viết thì không thể thực hiện được vì tôi chỉ có một tay cầm. Có thể điều này sẽ hữu ích với những người có cùng hoàn cảnh.
Làm cách nào để mở một tab mới bằng Selenium WebDriver với Java cho 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);
Đoạn mã trên sẽ tắt các tiện ích mở rộng đầu tiên và sử dụng tab mới của lớp rô bốt sẽ mở ra.
Dòng mã này sẽ mở một tab trình duyệt mới bằng cách sử dụng trình duyệt web selen
((JavascriptExecutor)getDriver()).executeScript("window.open()");
* JAVA
Tôi khuyên bạn nên sử dụng JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
Nhập sau:
import org.openqa.selenium.JavascriptExecutor;
Làm thế nào để mở một tab mới, nhưng quan trọng hơn, bạn thực hiện các nội dung trong tab mới đó như thế nào? Webdriver không thêm WindowHandle mới cho mỗi tab và chỉ có quyền kiểm soát tab đầu tiên. Vì vậy, sau khi chọn tab mới (Control + Tab Number), hãy đặt .DefaultContent () trên trình điều khiển để xác định tab hiển thị là tab bạn sẽ thực hiện.
Ngôn ngữ lập trình
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();
kiểm tra ví dụ hoàn chỉnh này để hiểu cách mở nhiều tab và chuyển đổi giữa các tab và cuối cùng đóng tất cả các 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);
} }
Ví dụ này được cung cấp bởi trang web này
Do lỗi trong https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 mặc dù webdriver.switchĐể thực sự chuyển đổi các tab, tiêu điểm vẫn nằm trên tab đầu tiên. Bạn có thể xác nhận điều này bằng cách thực hiện một driver.get sau switchWindow và thấy rằng tab thứ hai thực sự chuyển đến URL mới chứ không phải tab gốc.
Làm việc xung quanh bây giờ là những gì @ yardening2 đề xuất. Sử dụng js để mở một cảnh báo và sau đó sử dụng webdriver để chấp nhận nó.
Mã này phù hợp với tôi (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();
}
Câu hỏi : Làm cách nào để mở một tab mới bằng Selenium WebDriver với Java?
Câu trả lời : Sau khi nhấp vào bất kỳ liên kết nào, hãy mở tab mới.
Nếu chúng ta muốn xử lý tab mới mở thì chúng ta cần xử lý tab bằng cách sử dụng lệnh .switchTo (). Window ().
Chuyển sang tab cụ thể sau đó thực hiện thao tác và chuyển trở lại thành tab mẹ.
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));
}
}
Nếu bạn muốn mở tab mới, bạn có thể sử dụng
((JavascriptExecutor) getDriver()).executeScript("window.open()");
Nếu bạn muốn mở liên kết từ tab mới, bạn có thể sử dụng
với JavascriptExecutor:
public void openFromNewTab(WebElement element){
((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
}
với các Hành động:
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();
Xử lý cửa sổ trình duyệt bằng 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