Як відкрити нову вкладку у існуючому браузері Firefox за допомогою Selenium WebDriver (він же Selenium 2)?
Як відкрити нову вкладку у існуючому браузері Firefox за допомогою Selenium WebDriver (він же Selenium 2)?
Відповіді:
Код нижче відкриє посилання в новій вкладці.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Код нижче відкриє порожню нову вкладку.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
window.open()
, ви можете очікувати, що воно буде працювати на багатьох платформах / браузерах.
Просто для всіх, хто шукає відповідь у прив'язках Ruby / Python / C # (Selenium 2.33.0).
Зауважте, що фактичні ключі для надсилання залежать від вашої ОС, наприклад, Mac використовується COMMAND + t
замість CONTROL + t
.
Рубін
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
Пітон
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);
отримати доступ до будь-якої вкладки чи вікна. Очевидно, вам потрібно буде відслідковувати назви вікон як звичайних, щоб дозволити перемикання між ними.
Чому б цього не зробити
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
Щоб відкрити нову вкладку за допомогою JavascriptExecutor,
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Буде контролювати на вкладці відповідно до індексу:
driver.switchTo().window(tabs.get(1));
Управління драйвером на головній вкладці:
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));
, Я спробував це, але отримуючи масив поза обмеженим винятком, якщо ви знаєте будь-яке рішення, будь ласка, дайте мені знати.
driver.switchTo().window(tabs.get(2));
це добре працює, ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");
але я не матиму жодного контролю для переходу на вікна.
Щоб відкрити нове вікно в драйвері 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);
Ви можете використовувати наступний код за допомогою Java з Selenium WebDriver:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
За допомогою JavaScript:
WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
Після відкриття нової вкладки потрібно перейти на цю вкладку:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Спробуйте це для браузера 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));
}
Тепер WebDriver має підтримку для відкриття вкладок:
browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
Відкриється нова вкладка. Відкриття вікна насправді стало нестандартним випадком:
browser.manage.new_window(:window)
Вкладка чи вікно не буде автоматично фокусуватися. Щоб переключитися на нього:
browser.switch_to.window new_tab
Щоб відкрити нову вкладку в існуючому браузері Chrome за допомогою Selenium WebDriver, ви можете використовувати цей код:
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);
Я певний час відкрив нову вкладку в хромі. Навіть driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
не працював для мене.
Я з'ясував, що недостатньо того, що селен зосереджується на драйвері, Windows також має мати вікно спереду.
Моє рішення полягала в тому, щоб викликати попередження про хром, яке приведе вікно спереду, а потім виконає команду. зразок коду:
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Я використовую Selenium 2.52.0 в Java та Firefox 44.0.2. На жаль, жодне з вищезазначених рішень не працювало для мене. Проблема полягає в тому, якщо я викликаю driver.getWindowHandles (), я завжди отримую 1 одну ручку. Якось це має сенс для мене, оскільки Firefox - це єдиний процес, і кожна вкладка не є окремим процесом. Але, можливо, я помиляюся. Як би я не намагався написати власне рішення:
// 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);
Я використовував комбінацію Ctrl + t, щоб відкрити нову вкладку, Ctrl + w, щоб закрити її, а для повернення до початкової вкладки я використав Ctrl + 1 (перша вкладка). Я усвідомлюю, що моє рішення не є ідеальним або навіть хорошим, і я також хотів би переключитися з комутатором водія для виклику, але, як я писав, це було неможливо, оскільки у мене була лише одна ручка. Можливо, це буде корисно для когось із такою ж ситуацією.
Як відкрити нову вкладку за допомогою Selenium WebDriver з Java для 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);
Вищевказаний код відключить перші розширення і з використанням класу робота відкриється нова вкладка.
Цей рядок коду відкриє нову вкладку браузера за допомогою веб-диска селену
((JavascriptExecutor)getDriver()).executeScript("window.open()");
* JAVA
Я рекомендую використовувати JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
Після імпорту:
import org.openqa.selenium.JavascriptExecutor;
Як відкрити нову, але що ще важливіше, як ви робите речі на цій новій вкладці? Webdriver не додає новий WindowHandle для кожної вкладки, а лише контролює першу вкладку. Отже, після вибору нової вкладки (Control + Tab Number) встановити .DefaultContent () на драйвері, щоб визначити видиму вкладку як ту, над якою ви будете працювати.
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()
Actions at=new Actions(wd);
at.moveToElement(we);
at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
перевірте цей повний приклад, щоб зрозуміти, як відкрити кілька вкладок і переключитися між вкладками, а в кінці закрити всі вкладки
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);
} }
Цей приклад наводить ця веб-сторінка
Через помилку на https://bugs.chromium.org/p/chromedriver/isissue/detail?id=1465, навіть незважаючи на те, що webdriver.switchTo насправді робить перемикання вкладок, фокус залишається на першій вкладці. Ви можете підтвердити це, виконавши driver.get після перемиканняWWW і переконавшись, що друга вкладка переходить на нову URL-адресу, а не на початкову вкладку.
Наразі вирішуйте те, що @ yardening2 запропонувало. Використовуйте js, щоб відкрити сповіщення, а потім скористайтесь веб-драйвером, щоб прийняти його.
Цей код працює для мене (селен 3.8.1, хромедрівер = 2,34,522940, хром = 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();
}
Питання : Як відкрити нову вкладку за допомогою Selenium WebDriver з Java?
Відповідь : Після натискання на будь-яке посилання відкрийте нову вкладку.
Якщо ми хочемо обробити щойно відкриту вкладку, тоді нам потрібно обробити вкладку, використовуючи команду .switchTo (). Window ().
Перейдіть на певну вкладку, потім виконайте операцію та поверніться до батьківської.
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));
}
}
Якщо ви хочете відкрити нову вкладку, ви можете скористатися цією
((JavascriptExecutor) getDriver()).executeScript("window.open()");
Якщо ви хочете відкрити посилання з нової вкладки, ви можете скористатися цим
з JavascriptExecutor:
public void openFromNewTab(WebElement element){
((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
}
з діями:
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();
Поводження з вікном браузера за допомогою 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