使用selenium单击超链接后切换到新窗口

时间:2016-09-09 10:18:22

标签: java selenium selenium-webdriver selenium-chromedriver

在进行自动化操作时,任何人都可以帮助我在使用selenium点击超链接后切换到新窗口。我尝试了以下代码,但我的测试用例失败了:

public void openView(){

        final WebElement visa=driver.findElement(By.id("pageContainer"));   
        timeOut(10000);
        final List<WebElement> images=visa.findElements(By.className("nametag"));
        String handlewindow = driver.getWindowHandle();
        for(String winHandle : driver.getWindowHandles()){
            driver.switchTo().window(winHandle);
        }
        images.get(0).findElement(By.className("info")).findElement(By.tagName("a")).click();;

6 个答案:

答案 0 :(得分:0)

我们正在使用的(Java):

public void switchToLatestPopupWindow()
{
    Iterator<String> handleIterator = this.driver.getWindowHandles().iterator();
    while (handleIterator.hasNext())
    {
        String handle = handleIterator.next();
        if (!handleIterator.hasNext())
        {
            this.driver.switchTo().window(handle);
        }
    }
}

public void resetToMainWindow()
{
    Iterator<String> handleIterator = this.driver.getWindowHandles().iterator();
    String parentHandle = null;
    while (handleIterator.hasNext())
    {
        String handle = handleIterator.next();
        if (parentHandle == null)
        {
            parentHandle = handle;
        } else if (!parentHandle.equals(handle))
        {
            this.driver.switchTo().window(handle);
            this.driver.close();
        }
    }
    this.driver.switchTo().window(parentHandle);
}

答案 1 :(得分:0)

假设最后一行代码:

images.get(0).findElement(By.className("info")).findElement(By.tagName("a")).click()  

打开一个新窗口,在click()之后打开子窗口之前,您将获取父窗口的窗口句柄。

其次,这是切换到子窗口的代码:

String handlewindow = driver.getWindowHandles().toArray()[1];
driver.switchTo().window(handlewindow);

解释是driver.getWindowHandles()返回一组所有打开的窗口句柄。将Set转换为数组并在索引1处获取元素,因为子窗口为1,父窗口为0。

答案 2 :(得分:0)

使用从Stackoverflow上的另一个线程中获取的代码...

WebElement link = driver.findElement(By.linkText("<your link text>")); 
Actions newwin = new Actions(driver);
newwin.keyDown(Keys.CONTROL).click(link).keyUp(Keys.CONTROL)‌​.build().perform();

我检查了这个,然后在新标签页中打开链接。然后使用此代码切换到新选项卡...

String handlewindow = driver.getWindowHandles().toArray()[1];
driver.switchTo().window(handlewindow);  

答案 3 :(得分:0)

在for循环中,我们需要检查当前窗口句柄是否不等于循环提取的句柄

String handlewindow = driver.getWindowHandle();
for(String winHandle : driver.getWindowHandles()){
    if (! handlewindow.equals (winHandle))
        driver.switchTo().window(winHandle);
}

答案 4 :(得分:0)

    Actions ac  = Actions(driverObj);
    String parentHandle = driverObj.getWindowHandle();
    WebElement we = driverObj.findElement(By.xpath("here is your xpath"));
    ac.keyDown(Keys.CONTROL).click(we).keyUp(Keys.CONTROL).build().perform();
    String currentHandle ="";
    Set<String> win  = ts.getDriver().getWindowHandles();   

    Iterator<String> it =  win.iterator();
    if(win.size() > 1){
        while(it.hasNext()){
            String handle = it.next();
            if (!handle.equalsIgnoreCase(parentHandle)){
                ts.getDriver().switchTo().window(handle);
                currentHandle = handle;
            }
        }
    }
    else{
        System.out.println("Unable to switch");
    }

使用上面的代码,您可以打开新标签中的任何链接..

答案 5 :(得分:0)

要在选项卡之间切换,可以使用以下方法:

    public void switchToNextTab() {
        ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
        driver.switchTo().window(tab.get(1));
    }

    public void switchToPreviousTab() {
        ArrayList<String> tab = new ArrayList<>(driver.getWindowHandles());
        driver.switchTo().window(tab.get(0));
    }