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

如何用Selenium Java获取利物浦官网反馈评分按钮的ID

问题:无法定位利物浦官网反馈模态框中的评分按钮

利物浦官网首页右侧有反馈按钮,已成功打开反馈模态框,但无法获取1-10分评分按钮的ID,尝试ID、类名、XPath、CSS选择器定位均无效。

页面类代码

By acceptCookies = By.id("onetrust-accept-btn-handler");
By feedbackHomeBtn = By.id("nebula_div_btn");
By frame = By.cssSelector("iframe[id*='kampyleForm']");
By label = By.xpath("//label[contains(@class,'rating-label')][contains(.,'8')]");
By submitBtn = By.cssSelector(".panel-footer-web .submit-btn");
By closeBtn = By.cssSelector("button[aria-label='Close Survey']");

public void acceptCookies(){
    try{
        driver.findElement(acceptCookies).click();
    }catch(Exception e){
        System.out.println("Exceptions Caught" + e.getMessage());
    }
}

public void feedbackFuncionality(){
    try{
        driver.findElement(feedbackHomeBtn).click();
        driver.switchTo().frame(driver.findElement(frame));
        driver.findElement(label).click();
        driver.findElement(submitBtn).click();
        driver.findElement(closeBtn).click();
        driver.switchTo().defaultContent();

    }catch(Exception e){
        System.out.println("Exceptions Caught" + e.getMessage());
    }
}

测试类代码(test.java)

@BeforeTest
public void beforeTest(){
    WebDriverManager.chromedriver().setup();
    driver = new ChromeDriver();
    driver.manage().window().maximize();

    driver.get(url);    
}

@Test
public void feedbackClick() {
    FeedBackPage feedBackPage = new FeedBackPage(driver);
    try {
        feedBackPage.acceptCookies();
        Thread.sleep(5000);
        feedBackPage.feedbackFuncionality();
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

@AfterTest
public void afterTest(){
    driver.quit();
}

定位评分按钮的方法提示

  • 优化iframe切换逻辑:反馈模态框加载存在延迟,用显式等待替代固定sleep,确保iframe加载完成再切换:
    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frame));
    
  • 直接定位radio核心元素:评分按钮通常是input[type="radio"]绑定label,优先定位radio而非label更可靠,比如通过value属性匹配分数:
    By ratingBtn = By.xpath("//input[@type='radio' and @value='8']");
    
  • 利用label关联获取ID:在浏览器开发者工具中,查看评分label的for属性值,该值就是对应radio按钮的ID,再通过ID定位:
    // 先获取label的for属性
    String radioId = driver.findElement(By.xpath("//label[contains(text(),'8')]")).getAttribute("for");
    By ratingBtn = By.id(radioId);
    
  • 等待元素可点击:切换iframe后,显式等待评分元素可点击再执行点击操作:
    wait.until(ExpectedConditions.elementToBeClickable(ratingBtn)).click();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:15:31