Java Selenium如何获取新打开标签页的URL?当前仅能拿到旧标签页地址
问题原因
你获取到旧标签URL的核心原因是:点击PDF打开新标签后,WebDriver的上下文仍然停留在原标签页,没有切换到新打开的标签页,此时调用driver.getCurrentUrl()自然只能拿到原标签的地址。
解决步骤
- 点击PDF元素前,先保存原标签页的窗口句柄,用于后续切换或校验
- 点击后使用显式等待,等待新标签页完成加载,避免因页面未渲染完成导致获取句柄失败
- 遍历所有打开的窗口句柄,找到新打开的标签页对应的句柄,将WebDriver切换到该句柄
- 此时再调用
driver.getCurrentUrl()即可获取PDF标签页的URL - 操作完成后关闭新标签页,切回原标签页即可
修正后代码示例
package TestCases; public class Learn_TC3 extends SuperTestScript { @Test public void LoginTC1() throws Exception { //all the required data String USRID = ExcelLibrary.readData("Sheet1", 0, 0); String PSW = ExcelLibrary.readData("Sheet1", 0, 1); //create page objects LearnPage Lp = new LearnPage(); Tabswitch Ts = new Tabswitch(); //invoke the methods Lp.ClickonMaterialsButton(); // 保存原标签页句柄 String originalTab = driver.getWindowHandle(); // 替换固定等待为显式等待更稳定,也可保留原有Thread.sleep new WebDriverWait(driver, Duration.ofSeconds(3)).until(ExpectedConditions.elementToBeClickable(Lp.getPdf1Element())); Lp.ClickonPDF1();//点击后PDF在新标签打开 // 等待新标签页加载完成 new WebDriverWait(driver, Duration.ofSeconds(10)).until(d -> d.getWindowHandles().size() > 1); // 切换到新标签页 for (String tabHandle : driver.getWindowHandles()) { if (!tabHandle.equals(originalTab)) { driver.switchTo().window(tabHandle); break; } } // 此时获取的就是新标签页的URL String currentUrl = driver.getCurrentUrl(); ExcelLibrary.writeData("Sheet1", 0, 4, currentUrl); // 关闭新标签页并切回原标签,也可调用你封装的Ts.switchToPreviousTabAndClose() driver.close(); driver.switchTo().window(originalTab); } }
如果你已经在
Tabswitch类中封装了新标签切换逻辑,只需要调整执行顺序,在调用getCurrentUrl()之前完成新标签切换即可。
内容的提问来源于stack exchange,提问作者Saikumar Reddy Yelampalli
相关产品推荐
相关产品推荐

