如何使用Selenium WebDriver打开新标签页并启动链接?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Selenium WebDriver打开新标签页并启动链接?相关的知识,希望对你有一定的参考价值。

如何使用Selenium WebDriver打开新标签?

我想在新标签中打开多个链接。这是为了尽快完成构建验证任务。因此,在每个新标签中,可以打开所有与烟雾测试相关的链接,然后在每个对应于烟雾测试要求的标签内,我们可以进行健全性测试。

答案

码:

WebDriver wd = new FirefoxDriver();
wd.get("http://www.gmail.com");

wd.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);    
wd.manage().window().maximize();
//To open a new tab         
Robot r = new Robot();                          
r.keyPress(KeyEvent.VK_CONTROL); 
r.keyPress(KeyEvent.VK_T); 
r.keyRelease(KeyEvent.VK_CONTROL); 
r.keyRelease(KeyEvent.VK_T);    
//To switch to the new tab
ArrayList<String> tabs = new ArrayList<String>(wd.getWindowHandles());
wd.switchTo().window(tabs.get(1));
//To navigate to new link/URL in 2nd new tab
wd.get("http://facebook.com");
另一答案

在新标签中打开链接的唯一方法是模拟键盘快捷键。以下适用于FFX,Chrome和IE

  1. Ctrl + t将打开一个空白的新选项卡,并将焦点切换到它。
  2. 按住Ctrl键,然后单击该链接将在新选项卡中打开该链接,但将焦点保留在现有选项卡上。
  3. 按住Ctrl和Shift键,然后单击将打开新选项卡中的链接并将焦点移动到新选项卡上。
  4. Ctrl + w将关闭当前选项卡并将焦点切换到最后一个打开的选项卡(但请注意Ctrl + W,即Ctrl + Shift + w将关闭所有选项卡!)

Selenium(目前)在浏览器窗口中没有(当前)任何选项卡的概念,因此为了打开选项卡然后测试它,您必须使用选项3。

以下代码将执行选项3.然后立即关闭该新选项卡。 (在C#中)

new Actions(WebDriver)
    .KeyDown(Keys.Control)
    .KeyDown(Keys.Shift)
    .Click(tab)
    .KeyUp(Keys.Shift)
    .KeyUp(Keys.Control)
    .Perform();

new Actions(WebDriver)
    .SendKeys(Keys.Control + "w")
    .Perform();

你也可以使用:

.MoveToElement(tab)
.Click()

在第一个选项的中间,和

.KeyDown(Keys.Control)
.KeyDown("w")
.KeyUp("w")
.KeyUp(Keys.Control)

在第二个。

另一答案

/ *在浏览器中打开新标签* /

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的Actions类。请参阅以下代码:

WebDriver driver = new FirefoxDriver();
driver.get("<provide URL>");
WebElement link = driver.findElement(locator);
Actions builder = new Actions(driver);
Action openLinkInNewTab = builder
         .moveToElement(link)
         .sendKeys(link, Keys.CONTROL)
         .click(link)
         .keyUp(Keys.CONTROL)
         .build();

openLinkInNewTab.perform();

这可以循环多个链接。

另一答案
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; 

import java.awt.Robot;
import java.awt.event.KeyEvent;

import java.awt.AWTException; 



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



  //perform required actions on tab 1.
  driver.findElement(By.xpath("//input[@id='6']")).click();
  driver.findElement(By.xpath("//input[@id='plus']"));
  driver.findElement(By.xpath("//input[@id='3']"));
  driver.findElement(By.xpath("//input[@id='equals']"));

  //Call switchToTab() method to switch to 2nd tab.
  switchToTab();

  //Call switchToTab() method to switch to 1st tab
  switchToTab();


 } 

 public void switchToTab() {
  //Switching between tabs using CTRL + tab keys.
  driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"	");
  //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);
 } }

这个例子来自THIS BLOG POST

另一答案
// To open a new tab to establish second player connection
        ((javascriptExecutor)driver).executeScript("window.open('about:blank', '-blank')");
        // To switch to the new tab
        ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
        driver.switchTo().window(tabs.get(1));
        // To navigate to new link/URL in 2nd new tab
        driver.get("http://localhost:8080");

我这样做了,它完美无缺!

另一答案

上述解决方案对我不起作用。不知道为什么,但驱动程序会导航到新的URL,但新的选项卡不会打开。

我终于设法使用以下代码打开新标签:

IWebDriver driver = new ChromeDriver("path for chromedriver.exe");
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
driver.Navigate().GoToUrl("url1");
js.ExecuteScript("window.open()");
driver.SwitchTo().Window(driver.WindowHandles[driver.WindowHandles.Count - 1]);
driver.Navigate().GoToUrl("url2");

driver.WindowHandles.Count - 1将为您提供最后打开的选项卡,即此方案中的新选项卡。希望这有助于某人。

以上是关于如何使用Selenium WebDriver打开新标签页并启动链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Selenium WebDriver打开新标签页并启动链接?

如何使用 Selenium WebDriver 打开一个新选项卡并启动链接?

python下用selenium的webdriver包如何在执行完点击下一页后获得下一页新打开页面的html源代码呢?

python下用selenium的webdriver包如何在执行完点击下一页后没有获得下一页新打开页面的html源代码

在 OS X 中使用 Selenium WebDriver 打开和关闭新选项卡

在 Selenium Webdriver 中使用 Ctrl + 单击组合打开一个新选项卡