首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebDriver打开新标签

WebDriver打开新标签
EN

Stack Overflow用户
提问于 2011-06-21 15:47:02
回答 17查看 51.5K关注 0票数 27

我已经搜索了web和WebDriver应用程序接口。我没有看到使用WebDriver/Selenium2.0打开新标签页的方法。

有没有人能确认一下我是不是对的?

谢谢,克里斯。附言:我目前看到的替代方案是在同一窗口中加载不同的urls,或者打开新窗口。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2012-02-03 09:12:53

使用webdriver完全可以跨浏览器做到这一点,那些说你做不到的人太懒了。首先,您需要使用WebDriver将标记注入并锚定到打开所需选项卡的页面中。我是这样做的(注意: driver是一个WebDriver实例):

代码语言:javascript
复制
/**
 * Executes a script on an element
 * @note Really should only be used when the web driver is sucking at exposing
 * functionality natively
 * @param script The script to execute
 * @param element The target of the script, referenced as arguments[0]
 */
public void trigger(String script, WebElement element) {
    ((JavascriptExecutor)driver).executeScript(script, element);
}

/** Executes a script
 * @note Really should only be used when the web driver is sucking at exposing
 * functionality natively
 * @param script The script to execute
 */
public Object trigger(String script) {
    return ((JavascriptExecutor)driver).executeScript(script);
}

/**
 * Opens a new tab for the given URL
 * @param url The URL to 
 * @throws JavaScriptException If unable to open tab
 */
public void openTab(String url) {
    String script = "var d=document,a=d.createElement('a');a.target='_blank';a.href='%s';a.innerHTML='.';d.body.appendChild(a);return a";
    Object element = trigger(String.format(script, url));
    if (element instanceof WebElement) {
        WebElement anchor = (WebElement) element; anchor.click();
        trigger("var a=arguments[0];a.parentNode.removeChild(a);", anchor);
    } else {
        throw new JavaScriptException(element, "Unable to open tab", 1);
    }       
}

接下来,您需要告诉webdriver将其当前窗口句柄切换到新选项卡。下面是我如何做到这一点:

代码语言:javascript
复制
/**
 * Switches to the non-current window
 */
public void switchWindow() throws NoSuchWindowException, NoSuchWindowException {
    Set<String> handles = driver.getWindowHandles();
    String current = driver.getWindowHandle();
    handles.remove(current);
    String newTab = handles.iterator().next();
    locator.window(newTab);
}

完成此操作后,您可以使用相同的WebDriver实例与新页面上下文中的元素进行交互。完成该选项卡后,您始终可以使用与上面的switchWindow函数类似的机制返回到默认的窗口上下文。我将把它作为练习留给您去弄清楚。

票数 35
EN

Stack Overflow用户

发布于 2011-06-23 02:20:43

Selenium WebDriver接口目前不支持在浏览器中管理选项卡。

票数 30
EN

Stack Overflow用户

发布于 2013-04-15 23:05:31

代码语言:javascript
复制
        var windowHandles = webDriver.WindowHandles;
        var script = string.Format("window.open('{0}', '_blank');", url);
        scriptExecutor.ExecuteScript(script);
        var newWindowHandles = webDriver.WindowHandles;
        var openedWindowHandle = newWindowHandles.Except(windowHandles).Single();
        webDriver.SwitchTo().Window(openedWindowHandle);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6421988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档