You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium中getCurrentUrl()方法返回错误URL问题求助

解决Selenium中getCurrentUrl()返回初始页面URL的问题

嘿,我来帮你搞定这个问题!你遇到的情况不是隐式等待没生效,而是点击"Terms of Use"链接后,页面在新窗口打开了,但你的WebDriver还停留在原来的窗口,所以调用getCurrentUrl()自然返回的还是初始页面的地址。

问题根源

你可以手动点击页面上的"Terms of Use"链接看看,这个链接应该带了target="_blank"属性,会在新浏览器窗口打开内容。而WebDriver默认只会聚焦在最初打开的窗口,不会自动切换到新窗口。

解决方案:切换到新窗口

你需要先获取所有窗口的句柄(window handles),然后切换到新打开的窗口,之后再调用getCurrentUrl()就能拿到正确的URL了。下面是修改后的代码:

package SeleniumPackage; 

import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.support.ui.Select; 
import org.openqa.selenium.support.ui.WebDriverWait; 
import java.util.Set;

public class SeleniumClass { 
    public static void main(String[] args) { 
        WebDriver driver = new ChromeDriver(); 
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
        driver.get("https://learn.letskodeit.com/p/practice"); 

        // 先保存初始窗口的句柄
        String originalWindow = driver.getWindowHandle();

        WebElement benzRadioBtn = driver.findElement(By.id("benzradio")); 
        benzRadioBtn.click(); 
        WebElement hondaRadioBtn = driver.findElement(By.id("hondaradio")); 
        hondaRadioBtn.click(); 
        WebElement bmwRadioBtn = driver.findElement(By.id("bmwradio")); 
        bmwRadioBtn.click(); 

        WebElement benzCheckBox = driver.findElement(By.id("benzcheck")); 
        benzCheckBox.click(); 

        Select dropdown = new Select (driver.findElement(By.id("carselect"))); 
        dropdown.selectByValue("honda"); 

        WebElement element = driver.findElement(By.id("product")); 
        System.out.println(element.getText()); 

        // 点击链接,打开新窗口
        driver.findElement(By.linkText("Terms of Use")).click(); 

        // 等待新窗口加载完成(显式等待更稳定)
        new WebDriverWait(driver, 10).until(
            d -> d.getWindowHandles().size() > 1
        );

        // 获取所有窗口句柄并切换到新窗口
        Set<String> windowHandles = driver.getWindowHandles();
        for (String handle : windowHandles) {
            if (!handle.equals(originalWindow)) {
                driver.switchTo().window(handle);
                break;
            }
        }

        // 现在获取的就是新窗口的URL了
        String currentURL = driver.getCurrentUrl(); 
        System.out.println(currentURL); 

        // 如果之后需要切回原窗口,可以启用这句
        // driver.switchTo().window(originalWindow);

        // 记得关闭驱动
        driver.quit();
    } 
}

额外说明

  • 我添加了显式等待来确保新窗口完全加载后再切换,比直接遍历句柄更稳定,避免因窗口打开慢导致的空指针或切换失败问题。
  • 如果你后续需要操作原窗口,可以用driver.switchTo().window(originalWindow)切回去。

内容的提问来源于stack exchange,提问作者SlavaCa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:49