怎么通过selenium实现在新窗口打开链接

小小de太阳 发布于 2013/01/07 17:54
阅读 22K+
收藏 1

云原生2.0展望丨从“小众”到“首选”,推动云原生产业落地华为云作用几何?>>>

我想在selenium测试的时候,点击一个按钮,在新窗口中打开.但是页面代码中不存在target="_blank", 有没有方法可以实现这个功能的?

网上的解释都是打开新窗口找不到这个句柄,但我却想让selenium主动打开新窗口进行操作.

加载中
1
小小de太阳
小小de太阳

三年前的问题,竟然一直没有人回答,那我只能自己来解决一下了.

WebElement link = element.findElement(By.tagName("a"));
String href = link.getAttribute("href");
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("window.open('" + href + "')");
具体方式就是拿到一个连接的WebElement对象,然后通过getAttribute("href")属性获取它的链接地址.

然后通过调用javascript脚本的方式,执行window.open()方法在一个新窗口打开这个链接.

然后需要通过切换handle的方式跳转到这个新的页面去.具体方法:

for (String toHandle : driver.getWindowHandles()) {
    if (toHandle.equals(curHandle)) {
	continue;
    }

    driver.switchTo().window(toHandle); //切换到另一个新句柄
    SubjectPage subPage = PageCreator.createPage(SubjectPage.class);//创建页面,我自己封装的,可忽略
    driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    // TODO
    subPage.closeMe(); //自己封装的,忽略...
    driver.switchTo().window(curHandle);
}



希望给后边的人一些帮助

tcleansai
tcleansai
赞一个
0
gongxukai
gongxukai

当页面点击按钮或者链接时,浏览器打开新的窗口,这种情况下,selenium必须切换到新的窗口下的作用域,才能继续对新的窗口内的元素进行操作。

//浏览器打开了多少个新窗口,都会依次记录下来,可将这些窗口记录到数组中,如下:

String[] handles=new String[driver.getWindowHandles().size()];

driver.getWindowHandles().toArray(handles);
//如果点击按钮,浏览器打开了一个新窗口,此时,切换到新窗口,如下
WebDriver handle1=driver.switchTo().window(handles[1]);

//接下来就可以继续对新窗口下的元素进行操作了。

(以上是我在进行页面操作时,新窗口跳转到了用户登陆页面,并登陆。)

小小de太阳
小小de太阳
你说的意思我明白,是如何跳转到新页面,但我的问题是: 如果链接不支持打开新页签,如何强制打开一个新页签.
0
追忆逝水昔年
如果有target="_blank"  该怎么处理? 本人小白问问大神
0
fmpoffice
fmpoffice

嗯,感谢楼主分享。我也试试看。

0
xingmu
xingmu

Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).sendKeys("t").keyUp(Keys.CONTROL).perform();//新开一个tab页

action.keyDown(Keys.CONTROL).sendKeys(Keys.TAB).keyUp(Keys.CONTROL).perform();//切换tab页

但是还没找到如何在新tab中打开页面

Neoman
Neoman
似乎不行
0
m
myvic

PhantomJS 做浏览器,获取不到新窗口的id值呢

返回顶部
顶部