2014-04-11 27 views
10

Wie öffnet man einen neuen Tab mit Selenium WebDriver?Wie öffne ich einen neuen Tab mit Selenium WebDriver und starte den Link?

Ich möchte mehrere Links in neuen Registerkarten öffnen. Dies soll erreichen, dass die Build-Validierungsaufgaben so schnell wie möglich abgeschlossen werden. Also, dass in jedem neuen Tab alle Smoke-Test-Links geöffnet werden können und dann innerhalb jedes Tabs, der einer Rauch-Test-Anforderung entspricht, können wir den Vernunfttest durchführen.

+1

möglich Duplikat von [Wie öffnet einen neuen Tab mit Selenium WebDriver?] (Http://stackoverflow.com/questions/17547473/how-to-open- genommen a-new-tab-using-selen-webdriver) – xyz

+1

Kein Duplikat ... Hier geht es darum, einen LINK in einem neuen Tab zu öffnen - mit dem anderen geht es darum, einen komplett neuen Tab zu öffnen. – Brondahl

+0

Mögliches Duplikat von [Öffnen Sie eine neue Registerkarte in einer vorhandenen Browsersitzung mit Selenium] (https://stackoverflow.com/questions/41587533/open-a-new-tab-in-an-existing-browser-session-using-using- selen) – Gokul

Antwort

5

Code:

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"); 
+0

Der obige Robot-Code funktioniert nur, um eine neue Registerkarte zu öffnen. Die 2. URL (http://facebook.com) wird jedoch nicht in der 2. Registerkarte geöffnet, da sie nicht auf die 2. Registerkarte umgeschaltet wird. Es muss zum 2. Tab wechseln –

+0

Tippfehler im Code. Ersetzen Sie 'driver.' mit' wd.'. Aus irgendeinem Grund wird die Bearbeitung abgelehnt. – Luke

1

Wir können die Klasse Aktionen von WebDriver verwenden. Siehe folgenden Code:

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

Dies kann für mehrere Verbindungen geloopt werden.

+0

Wenn Sie die Maus zu dem Element bewegt haben, müssen Sie das Element nicht bereitstellen, wenn Sie darauf() klicken. Die Verwendung von 'sendKeys()' führt zu nichts, denn wenn Sie 'click()' ausführen, wird der Steuerschlüssel nicht mehr gedrückt. Und dann, wenn Sie 'keyUp()' aufrufen, stürzt es ab, weil die Strg-Taste ALREADY ist. – Brondahl

2

/* Neue Registerkarte öffnen 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)); 

} 
3

Der einzige Weg, um Links in neuen Tabs zu öffnen, ist durch Klaviatur Verknüpfungen zu simulieren. Die folgende halten wahr in FFX, Chrome & IE

  1. Strg + t einen leeren neuen Tab öffnen und wechseln Fokus darauf.
  2. Halten Ctrl, dann auf den Link klicken, wird der Link in einem neuen Tab öffnen, aber auf der vorhandenen Registerkarte konzentrieren lassen.
  3. Halten Sie die STRG-Taste und Umschalttaste gedrückt, klicken Sie dann auf den Link in einem neuen Tab und verschieben Sie den Fokus auf die neue Registerkarte.
  4. Strg + w wird die aktuelle Registerkarte schließen und den Fokus auf die letzten offenen Tab wechseln (obwohl beachten Sie, dass Strg + W dh Strg + + w Umschalttaste werden alle Registerkarten schließen!)

Selen nicht (derzeit) Haben Sie ein Konzept von Tabs in einem Browserfenster, so müssen Sie die Option 3 verwenden, um die Registerkarte zu öffnen und zu testen.

Der folgende Code führt Option 3 aus und schließt dann sofort diese neue Registerkarte. (In 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(); 

Sie könnten auch verwenden:

.MoveToElement(tab) 
.Click() 

in der Mitte der ersten Option und

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

in der zweiten.

0

Die oben genannten Lösungen nicht für mich arbeiten. Nicht sicher, warum, aber der Fahrer würde zur neuen URL navigieren, aber eine neue Registerkarte öffnet sich einfach nicht.

ich es endlich geschafft, neuen Tab zu öffnen mit diesem Code:

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 erhalten Sie die zuletzt geöffneten Tab heißt die neue Registerkarte in diesem Szenario erhalten. Hoffe das hilft jemandem aus.

0
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'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); 
} } 

Dieses Beispiel aus THIS BLOG POST

Verwandte Themen