Como abrir uma nova guia no navegador Firefox existente usando Selenium WebDriver (também conhecido como Selenium 2)?
Como abrir uma nova guia no navegador Firefox existente usando Selenium WebDriver (também conhecido como Selenium 2)?
Respostas:
O código abaixo abrirá o link em uma nova aba.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN);
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
O código abaixo abrirá uma nova guia vazia.
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
window.open()
, pode esperar que funcione em muitas plataformas / navegadores.
Apenas para qualquer pessoa que esteja procurando uma resposta em ligações Ruby / Python / C # (Selenium 2.33.0).
Observe que as chaves reais a serem enviadas dependem do seu sistema operacional, por exemplo, o Mac usa COMMAND + t
, em vez de 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
Pitão
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);
acessar qualquer guia ou janela. Obviamente, você precisa manter o controle dos nomes das janelas normalmente para permitir a alternância entre eles.
Por que não fazer isso
driver.ExecuteScript("window.open('your url','_blank');");
driver.ExecuteScript("window.open('about:blank','_blank');");
Para abrir uma nova guia usando JavascriptExecutor,
((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Irá controlar na guia de acordo com o índice:
driver.switchTo().window(tabs.get(1));
Controle do motorista na guia principal:
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));
, Eu tentei isso, mas obtendo exceção de array fora do limite, Se você souber de alguma solução, por favor me avise.
driver.switchTo().window(tabs.get(2));
, isso funciona bem, ((JavascriptExecutor) driver).executeScript("window.open('https://www.stackoverflow.com','_blank');"); Thread.sleep(3000); ((JavascriptExecutor) driver).executeScript("window.open('https://www.flipkart.com','_blank');");
mas não terei nenhum controle para alternar para o Windows.
Para abrir uma nova janela no 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);
Você pode usar o seguinte código usando Java com Selenium WebDriver:
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Usando JavaScript:
WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
Depois de abrir uma nova guia, é necessário alternar para essa guia:
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Experimente isso para o navegador 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 agora tem suporte para abrir guias:
browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
Irá abrir uma nova guia. Na verdade, abrir uma janela se tornou um caso fora do padrão:
browser.manage.new_window(:window)
A guia ou janela não será focalizada automaticamente. Para mudar para ele:
browser.switch_to.window new_tab
Para abrir uma nova guia no navegador Chrome existente usando Selenium WebDriver, você pode usar este código:
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);
Tive problemas para abrir uma nova guia no Chrome por um tempo. Mesmo driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
não funcionou para mim.
Descobri que não basta que o selênio tenha foco no driver, o Windows também tem que ter a janela na frente.
Minha solução foi invocar um alerta no cromo que traria a janela para frente e, em seguida, executaria o comando. Código de amostra:
((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Estou usando o Selenium 2.52.0 em Java e Firefox 44.0.2. Infelizmente, nenhuma das soluções acima funcionou para mim. O problema é que se eu chamar driver.getWindowHandles (), sempre recebo um único identificador. De alguma forma, isso faz sentido para mim, pois o Firefox é um processo único e cada guia não é um processo separado. Mas talvez eu esteja errado. De qualquer forma, tento escrever minha própria solução:
// 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);
Usei a combinação Ctrl + t para abrir uma nova guia, Ctrl + w para fechá-la e, para voltar à guia original, usei Ctrl + 1 (a primeira guia). Sei que a minha solução não é perfeita ou mesmo boa e gostaria também de trocar com switchTo call do driver, mas como escrevi não foi possível porque tinha apenas um identificador. Talvez isso seja útil para alguém na mesma situação.
Como abrir uma nova guia usando Selenium WebDriver com Java para cromo?
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 código acima desabilitará as primeiras extensões e uma nova guia da classe de robô será aberta.
Esta linha de código irá abrir uma nova guia do navegador usando selenium webdriver
((JavascriptExecutor)getDriver()).executeScript("window.open()");
*JAVA
Eu recomendo usar JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
A seguir importação:
import org.openqa.selenium.JavascriptExecutor;
Como abrir uma nova, mas mais importante, como você faz as coisas nessa nova guia? O Webdriver não adiciona um novo WindowHandle para cada guia e só tem controle da primeira guia. Assim, após selecionar uma nova guia (Control + Tab Number), defina .DefaultContent () no driver para definir a guia visível como aquela em que você vai trabalhar.
Visual básico
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();
verifique este exemplo completo para entender como abrir várias guias e alternar entre elas e, no final, feche todas as guias
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);
} }
Este exemplo é dado por esta página da web
Devido a um bug em https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 , embora webdriver.switchTo realmente mude de guia, o foco é deixado na primeira guia. Você pode confirmar isso executando driver.get após switchWindow e ver se a segunda guia realmente vai para o novo URL e não para a guia original.
Uma solução temporária foi o que @ yardening2 sugeriu. Use js para abrir um alerta e, em seguida, use o webdriver para aceitá-lo.
Este código está funcionando para mim (selênio 3.8.1, chromedriver = 2.34.522940, cromo = 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();
}
Descrição : Como abrir uma nova aba usando Selenium WebDriver com Java?
Resposta : Após clicar em qualquer link, abra uma nova aba.
Se quisermos lidar com a guia aberta recentemente, precisamos lidar com a guia usando o comando .switchTo (). Window ().
Alterne para a guia específica, execute a operação e volte para a guia principal.
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));
}
}
Se você deseja abrir a nova guia, você pode usar este
((JavascriptExecutor) getDriver()).executeScript("window.open()");
Se você deseja abrir o link da nova guia, você pode usar este
com JavascriptExecutor:
public void openFromNewTab(WebElement element){
((JavascriptExecutor)getDriver()).executeScript("window.open('"+element.getAttribute("href")+"','_blank');");
}
com ações:
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();
Manipulando a janela do navegador usando o 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