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

时间:2014-04-11 11:52:51

标签: selenium webdriver

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

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

8 个答案:

答案 0 :(得分:7)

代码:

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

答案 1 :(得分:4)

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

  1. Ctrl + t将打开一个空白的新标签,并将焦点切换到它。
  2. 按住Ctrl键,然后点击该链接将在新标签页中打开该链接,但将重点放在现有标签页上。
  3. 按住Ctrl和Shift键,然后单击将打开新标签页中的链接并将焦点移至新标签页。
  4. Ctrl + w将关闭当前选项卡并将焦点切换到上一个打开的选项卡(但请注意Ctrl + W,即Ctrl + Shift + w将关闭所有选项卡!)
  5. 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)
    

    在第二个。

答案 2 :(得分:2)

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

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 :(得分:1)

我们可以使用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();

这可以为多个链接循环。

答案 4 :(得分:1)

<?php

    include('lib/conn_sqli.php');
    // include ('lib/conn.php'); COMMENT THIS OUT OR REMOVE THIS
    $total_duration = $_POST['total_duration'];
    $desc_duration = $_POST['desc_duration'];

    if($stmt = $db->prepare("INSERT INTO duration (total_duration, desc_duration) VALUES (?, ?)")){
        $stmt->bind_param("ss", $total_duration, $desc_duration);
        $stmt->execute();
        $stmt->close();
        echo ("succeed");
    }

?>

此示例取自THIS BLOG POST

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

在第一个解决方案中,添加Thread.sleep(5000)语句。直到我添加了sleep语句,我才多次出现错误索引错误。

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

try {Thread.sleep(5000);} catch (InterruptedException e) {}

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

答案 7 :(得分:-1)

以上解决方案对我不起作用。不知道为什么,但是驱动程序会导航到新的网址,但新的标签只是不会打开。

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

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将为您提供最后打开的标签,即此方案中的新标签。希望这可以帮助别人。