【问题标题】:Weird behavior while selecting date in selenium在硒中选择日期时的奇怪行为
【发布时间】:2022-01-23 14:07:47
【问题描述】:

我正在尝试使用 selenium+java 选择一个日期,但它的行为非常奇怪。
除此之外,我得到了 element not found 异常。
我在函数中传递日期
我做错了什么
下面是代码

public class date_automation {
WebDriver driver = null;

@BeforeTest
public void initialise() {
    WebDriverManager.chromedriver().setup();
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.get("https://www.goibibo.com/");
}

@Test
public void test_calendar() throws InterruptedException {
    WebElement departure_date = driver.findElement(By.id("departureCalendar"));
    departure_date.click();
    selectDateInCalendar("23/01/2022");
}

public void selectDateInCalendar(String date) throws InterruptedException {

    Date CurrentDate = new Date();
    SimpleDateFormat newDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    try {
        Date expectedDate = newDateFormat.parse(date);
        String day = new SimpleDateFormat("dd").format(expectedDate);
        String month = new SimpleDateFormat("MMMM").format(expectedDate);
        String year = new SimpleDateFormat("yyyy").format(expectedDate);
        System.out.println(day + "*****" + month + "*****" + year);
        String expectedMonthYear = month + " " + year;
        System.out.println(expectedMonthYear);
        String displayDate = driver.findElement(By.xpath("//div[@class='DayPicker-Caption']")).getText();
        while (true) {

            if (expectedMonthYear.equals(displayDate)) {
                driver.findElement(By.xpath("//div[text()='" + day + "']")).click();
            } else {
                driver.findElement(By.xpath("//span[@class='DayPicker-NavButton DayPicker-NavButton--next']"))
                        .click();
            }

        }

    } catch (ParseException e) {
        e.printStackTrace();
    }

}

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

}

【问题讨论】:

  • 您遇到了什么异常以及针对什么代码行? behaving very weirdly 是什么意思?
  • 它将持续到 2023 年 12 月,并抛出异常 org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素:{"method":"xpath","selector":"/ /span[@class='DayPicker-
  • @ManishB 在您的代码中,您需要将此行 String displayDate = driver.findElement(By.xpath("//div[@class='DayPicker-Caption']")).getText(); 放在 while 循环内。

标签: java selenium


【解决方案1】:

在您的代码中,您需要将此行 String displayDate = driver.findElement(By.xpath("//div[@class='DayPicker-Caption']")).getText(); 放在 while 循环中。

我也试过了,可以通过以下方式选择日期:

  • 单击所需的日期选择器对象
  • 检查显示的月份和年份,看看它是否与我们想要选择的所需/预期的月份和年份匹配
  • 如果第 2 步匹配失败,请继续点击下个月按钮(只要它未被禁用)
  • 达到所需的月份和年份后,选择所需的日期

请参考以下代码选择出发和到达日期:

package usecase;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

public class DatePicker {
    public static WebDriver driver;

    /**
     * selects the date provided in d/m/yyyy format
     */
    public static void selectDate(By dateObject, String date) {
        driver.findElement(dateObject).click();
        SimpleDateFormat sdfInput = new SimpleDateFormat("d/M/yyyy");
        SimpleDateFormat sdfOutput = new SimpleDateFormat("d-MMMM yyyy");
        try {
            String outputDate = sdfOutput.format(sdfInput.parse(date));
            System.out.println(outputDate);
            String outputDay = outputDate.split("-")[0];
            String outputMY = outputDate.split("-")[1];
            String displayedHeading;
            while (!(displayedHeading = driver.findElement(By.className("DayPicker-Caption")).getText())
                    .equalsIgnoreCase(outputMY)) {
                WebElement gotoNextMonth = driver.findElement(By.cssSelector("span[aria-label='Next Month']"));
                if (!gotoNextMonth.getAttribute("class").contains("interactionDisabled")) // click next month button
                                                                                            // only if it is NOT
                                                                                            // disabled
                    gotoNextMonth.click();
                else {
                    System.err.println("The Date " + date + " could not be selected");
                    break;
                }
            }
            driver.findElement(By.xpath("//div[@class='DayPicker-Day']/div[text()='" + outputDay + "']")).click();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws InterruptedException {
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://www.goibibo.com/");
        selectDate(By.id("departureCalendar"), "25/6/2022");
        selectDate(By.id("returnCalendar"), "1/7/2022");
        Thread.sleep(3000); // Let me see what happened on screen
        driver.quit();
    }
}

演示:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 2023-03-16
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多