清冬暖雪 2023-12-13 13:19 采纳率: 50%
浏览 24
已结题

driver.getCurrentUrl()方法无法获取跳转后的窗口链接

目前遇到一个问题,就是通过webdriver驱动打开百度链接,然后点击新闻按钮打开一个新的窗口,
这时通过driver.getCurrentUrl()方法获取新开页面的url,
但是目前这个获取的url总是起始页面的链接,并不是点击新闻按钮新跳转的链接,怎么解决这个问题,如何获取跳转后页面的url


@Test
    public void clickTest() throws InterruptedException {
        WebElement clickTest =driver.findElement(By.linkText("新闻"));
        clickTest.click();//打开新闻链接
        Thread.sleep(3000);
        //校验打开的新闻链接
       String urlTest= driver.getCurrentUrl();//获取当前页面的URL
        System.out.println("当前页面url"+urlTest);
        Assert.assertEquals(urlTest,"https://news.baidu.com/","进入新闻链接不正确");


    }
  • 写回答

2条回答 默认 最新

  • 清冬暖雪 2023-12-13 15:49
    关注
    
    // 导入相关类库
    import org.openqa.selenium.*;
    import org.openqa.selenium.chrome.ChromeDriver;
     
    public class SwitchWindowExample {
        public static void main(String[] args) throws InterruptedException {
            // 设置 ChromeDriver 路径
            System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
            
            // 创建 WebDriver 对象并打开网页
            WebDriver driver = new ChromeDriver();
            driver.get("https://www.example.com");
            
            // 点击按钮或其他操作后,会跳转到新窗口
            Thread.sleep(2000); // 等待两秒钟
            
            // 获取当前窗口的句柄
            String currentHandle = driver.getWindowHandle();
            
            // 获取所有窗口的句柄列表
            Set<String> handles = driver.getWindowHandles();
            
            // 遍历窗口句柄列表,查找目标窗口
            for (String handle : handles) {
                if (!handle.equals(currentHandle)) {
                    // 切换到目标窗口
                    driver.switchTo().window(handle);
                    
                    // 进行需要的操作...
                    
                    break; // 只处理第一个符合条件的窗口
                }
            }
            
            // 最后记得关闭WebDriver
            driver.quit();
        }
    }
    
    WebElement clickTest =driver.findElement(By.linkText("新闻"));
            clickTest.click();//打开新闻链接
            Thread.sleep(3000);
            //获取当前窗口权柄
            String currentHandle = driver.getWindowHandle();
            //获取所有窗口权柄,并将权柄放在集合handles变量中
            Set<String> handles = driver.getWindowHandles();
            // 遍历窗口句柄列表,查找目标窗口
            for (String handle : handles) {
                if (!handle.equals(currentHandle)) {
                    // 切换到目标窗口
                    driver.switchTo().window(handle);
                    //校验打开的新闻链接
                    //获取当前页面的URL
                    String urlTest = driver.getCurrentUrl();//获取新开的新闻链接
                    Thread.sleep(3000);
                    System.out.println("当前页面链接是"+urlTest);
                    Assert.assertEquals(urlTest, "https://news.baidu.com/");
                    break;
                }
            }
    

    通过如上方法也可以切换窗口driver,
    上面是通过for if语句来实现的 ,还有一种方法,同时也可以在切换回初始页面的driver,该方法是通过获取set下标位置来定位driver
    参考代码如下:

    # 窗口句柄切换
    String initialWindowHandle = driver.getWindowHandle();  //保存原始的浏览器窗口
    DriverUtil.clickByCss(element, "div.title-area > div.ajust > span.title");//这个操作之后将会弹出另外一个浏览器窗口
    DriverUtil.sleep(3);
    Set<String> set = driver.getWindowHandles();//获取所有窗口权柄放在set集合中
    set.remove(initialWindowHandle);//将初始窗口权柄从set集合中移除
    assert set.size() == 1;  //判断列表长度是否为1
    driver.switchTo().window((String) set.toArray()[0]);  //如果长度为1则执行将driver指向新弹出的浏览器窗口
    String detailUrl = driver.getCurrentUrl();//获取新窗口url
    driver.close();  //关闭新弹出的浏览器窗口
    driver.switchTo().window(initialWindowHandle);  //回到原始的浏览器窗口
    

    实际代码如下:

    String initialWindowHandle = driver.getWindowHandle(); //保存原始的浏览器窗口
            WebElement clickTest =driver.findElement(By.linkText("新闻"));
            clickTest.click();//打开新闻链接
            Thread.sleep(3000);
            //获取所有窗口句柄,并保存在list集合中
            Set<String> set = driver.getWindowHandles();
            //将最初权柄窗口从集合中移除,目前只剩新开窗口权柄
            set.remove(initialWindowHandle);
            //将driver指向新弹出的浏览器窗口
            assert set.size() == 1;//判断集合set长度是否为1
            driver.switchTo().window((String) set.toArray()[0]);//如果set长度为1则将driver指向下标为0的窗口
            //校验打开的新闻链接
            //获取当前页面的URL
            String urlTest = driver.getCurrentUrl();//获取新开的新闻链接
            Thread.sleep(3000);
            System.out.println("当前页面链接是"+urlTest);
            Assert.assertEquals(urlTest, "https://news.baidu.com/");
            //回到原始的浏览器窗口
            driver.switchTo().window(initialWindowHandle);
            //获取原始窗口url链接
            String urlTest2=driver.getCurrentUrl();
            System.out.println("返回之后的页面链接是"+urlTest2);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 修改了问题 12月13日
  • 创建了问题 12月13日