Как открыть новую вкладку с помощью Selenium WebDriver и начать ссылку?

Как открыть новую вкладку с помощью Selenium WebDriver?

Я хочу открыть несколько ссылок на новых вкладках. Это необходимо для того, чтобы как можно скорее завершить задачи проверки сборки. Таким образом, на каждой новой вкладке можно было бы открыть все связанные ссылки smoke test, а затем в каждой вкладке, которая соответствует требованию smoke test, мы можем провести тест на работоспособность.

Ответ 1

код:

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>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
//To navigate to new link/URL in 2nd new tab
wd.get("http://facebook.com");

Ответ 2

Единственный способ открыть ссылки на новых вкладках - имитировать сочетания клавиш. В FFX, Chrome и IE сохраняются следующие значения:

  • Ctrl + t откроет новую новую вкладку и переключит фокус на нее.
  • Удерживая Ctrl, затем нажмите ссылку, чтобы открыть ссылку на новой вкладке, но оставьте фокус на существующей вкладке.
  • Удерживая Ctrl и Shift, щелчок откроет ссылку на новой вкладке И переместит фокус на новую вкладку.
  • Ctrl + w закроет текущую вкладку и переключит фокус на последнюю открытую вкладку (хотя обратите внимание, что Ctrl + W, т.е. Ctrl + Shift + w закроет ВСЕ вкладки!)

Selenium не имеет (в настоящее время) концепцию вкладок в окне браузера, поэтому, чтобы открыть вкладку, а затем протестировать ее, вы должны использовать опцию 3.

Следующий код выполнит опцию 3. и сразу же закроет эту новую вкладку. (В С#)

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)

во втором.

Ответ 3

/* Откройте новую вкладку в браузере */

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

}

Ответ 4

Мы можем использовать класс Actions WebDriver. Смотрите следующий код:

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

Это может быть закодировано для нескольких ссылок.

Ответ 5

Вышеупомянутые решения не сработали для меня. Не уверен, почему, но драйвер перейдет к новому 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 предоставит вам последнюю открытую вкладку, то есть новую вкладку в этом сценарии. Надеюсь, это поможет кому-то.

Ответ 6

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 +"\t");
  //Switch to current selected tab 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);
 } }

Этот пример взят из ЭТОТ БЛОГ-ПОЧТА