如何点击日历中的某一天并跳过另一天?

问题描述 投票:0回答:1

我尝试单击一天,但收到错误“过时元素引用:未找到过时元素” 我可以打印一个月中的每一天以及类似的内容,但是当我尝试单击某一天时,它会出现错误

        
public void GetData(WebDriver driver,String userYear) {
        
            
List<WebElement> days = locators.getLocationOfTheDays(divPathSelector(userYear));
            for(WebElement day : days) {
                System.out.println(day.getText());      
                day.click();
                ShowBtn(userYear);
                BackBtn(userYear);
            }
            
        }

我想点击该月的第一天,然后跳过第二天,点击第二天。必须这样一直到这个月的最后一天。

java selenium-webdriver
1个回答
0
投票

您的错误消息听起来像是该元素未附加到 DOM。这就是为什么我建议通过等待元素来确保元素正确加载,或者如果加载时出现问题则抛出异常。

由于您使用

selenium
,您可以使用如下代码片段来完成此操作:

import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public void GetData(WebDriver driver, String userYear) {
    WebDriverWait wait = new WebDriverWait(driver, 10);
    
    List<WebElement> days = locators.getLocationOfTheDays(divPathSelector(userYear));
    for (WebElement day : days) {
        try {
            System.out.println(day.getText());
            wait.until(ExpectedConditions.elementToBeClickable(day)).click();
            ShowBtn(userYear);
            BackBtn(userYear);
        } catch (StaleElementReferenceException e) {
            System.out.println("Stale element reference encountered. Retrying...");
            day = driver.findElement(By.xpath(divPathSelector(userYear))); // Re-locate the element
            wait.until(ExpectedConditions.elementToBeClickable(day)).click();
            ShowBtn(userYear);
            BackBtn(userYear);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.