首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >下面的Selenium代码抛出了StaleElementRefernceExecption。我怎么才能修复它?

下面的Selenium代码抛出了StaleElementRefernceExecption。我怎么才能修复它?
EN

Stack Overflow用户
提问于 2019-03-22 02:01:48
回答 1查看 44关注 0票数 0

我正在尝试用Selenium WebDriver Java自动化一个日历。当需要识别日期并单击日期时,它会抛出一个StaleElementRefernceExeception。请看下面的代码,帮我解决这个问题。

代码语言:javascript
复制
package com.initial.selenium;

import java.util.List;
import java.util.concurrent.TimeUnit;

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

public class Calender2 {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Users\\Shahid\\eclipseworkspace\\InitialSeleniumProject\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("http://www.path2usa.com/travel-companions");
        driver.findElement(By.xpath("//*[@id='travel_from']")).sendKeys("Chicago");
        driver.findElement(By.xpath("//*[@id='Rockford']")).click();
        driver.findElement(By.xpath("//*[@id='travel_to']")).sendKeys("Dallas");
        driver.findElement(By.xpath("//*[@id='Dallas-Fort Worth']")).click();
        driver.findElement(By.xpath("//*[@id='travel_date']")).click();

        WebElement DateMonth=driver.findElement(By.xpath("//div[@class='datepicker- days']/table/thead/tr/th[2]"));
        WebElement datechanger=driver.findElement(By.xpath("//div[@class='datepicker- days']/table/thead/tr/th[3]"));
        List<WebElement> dates=driver.findElements(By.tagName("td"));
        while(!DateMonth.getText().contains("April")) {
            datechanger.click();
            for(int i=0;i<dates.size();i++) {
                if(dates.get(i).getText().equalsIgnoreCase("23")) {
                    dates.get(i).click();  
                    break;
                }   
            }
        }
    }

}
EN

回答 1

Stack Overflow用户

发布于 2019-03-22 02:17:04

当您试图操作的元素不再出现在html中或已变得陈旧时,就会出现StaleElementReferenceException。因此,要纠正它,您必须再次获取元素。

在您的情况下,您可以通过在while循环中进行以下更改来更正它:

代码语言:javascript
复制
List<WebElement> dates=driver.findElements(By.tagName("td"));
while (!DateMonth.getText().contains("April")) {
    datechanger.click();
    dates=driver.findElements(By.tagName("td"));
    for (int i = 0; i < dates.size(); i++) {
        if (dates.get(i).getText().equalsIgnoreCase("23")) {
            dates.get(i).click();
            break;
        }
    }
}

此外,您用来更改月份的xpath是不正确的,因此请使用下面给出的xpath,而不是您正在使用的xpath:

代码语言:javascript
复制
WebElement datechanger=driver.findElement(By.xpath("(//th[@class='prev'])[1]"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55286615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档