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

Selenium日历操作异常:循环停在九月而非八月,日期打印未截止15日

Selenium日历自动化问题修正

问题1:循环期望停在八月却停在九月

错误原因

  1. 方向逻辑错误:你使用了nextButton(下一个月按钮),如果当前月份晚于八月(比如九月),点击后只会跳到更晚的月份,永远无法到达八月;若当前月份早于八月,可能因页面元素加载延迟,导致代码重复点击一次,跳过八月到九月。
  2. 未处理元素加载延迟:点击月份切换按钮后,直接获取月份文本,可能页面还未更新,拿到的仍是旧月份值,引发多余点击。

修正方案

  • 切换到上一个月按钮(flatpickr-prev-month),而非下一个月按钮;
  • 点击后添加短暂等待,确保月份文本更新后再获取。

问题2:for循环打印所有日期而非到15日停止

错误原因

日期元素定位错误://div[@class='dayContainer']是整个日历的容器元素,而非单个日期元素。你的dates列表仅包含一个容器元素,调用getText()会取出容器内所有日期的文本,导致打印全部日期,且判断条件equals("15")永远不成立,无法触发break。

修正方案

定位单个日期元素,比如//div[@class='dayContainer']//div[@class='day'](适配flatpickr日历的元素结构),这样dates列表会包含所有单个日期元素,循环时逐个判断即可。


修正后的完整代码

package class1;

import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;

public class calendar {

    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\A0885643\\Desktop\\Selenium-Java\\Day1\\DriverWeb1\\drivers\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.path2usa.com/travel-companion/");
        driver.manage().window().maximize();
        
        Actions ac1 = new Actions(driver);
        JavascriptExecutor js = (JavascriptExecutor) driver;
        
        WebElement language = driver.findElement(By.xpath("//select[@name='form_fields[travel_comp_airline]']"));
        js.executeScript("arguments[0].scrollIntoView(true);", language);
        
        Thread.sleep(5000);
        
        WebElement calendar =  driver.findElement(By.xpath("//input[@id='form-field-travel_comp_date']"));
        ac1.click(calendar).build().perform();
        
        String months = driver.findElement(By.xpath("//span[@class='cur-month']")).getText();
        // 替换为上一个月按钮
        WebElement prevButton = driver.findElement(By.xpath("//span[@class='flatpickr-prev-month']"));
        
        while(!months.equals("August")) {                   
            prevButton.click();
            // 点击后等待元素更新
            Thread.sleep(1000);
            months = driver.findElement(By.xpath("//span[@class='cur-month']")).getText();
            System.out.println("Current month: " + months);
        }
        
        Thread.sleep(2000);
        // 定位单个日期元素
        List<WebElement> dates = driver.findElements(By.xpath("//div[@class='dayContainer']//div[@class='day']"));
        
        for(int i = 0;i<dates.size();i++) {
            String dateText = dates.get(i).getText().trim();
            System.out.println(dateText);
            if(dateText.equals("15")) { 
                break;              
            }
        }
        driver.quit();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:45:56