当前位置: 首页 > 知识库问答 >
问题:

下面的硒码在抛StaleElementRefernceExecption,如何修复?[复制]

陆阳曜
2023-03-14

我正在尝试用硒网络驱动程序Java自动化日历。当涉及到识别日期并单击日期时,它会抛出一个StaleElementRefernceExective。请参阅下面的代码并帮助我修复它。

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;
                }   
            }
        }
    }

}

共有1个答案

程磊
2023-03-14

当您试图操作的元素不再存在于html中或已经过时时,就会出现异常。因此,为了纠正它,您必须再次获取元素。

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

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:

WebElement datechanger=driver.findElement(By.xpath("(//th[@class='prev'])[1]"));
 类似资料:
  • 我创建了一个解决运动方程问题的交互式类(在用户输入循环中的另一个类中访问:mathiverse),它工作得很好,但是在给出答案之后,它抛出了一个。 答案给出后,我希望我的代码继续搜索输入,但它抛出了这样的消息: 线程“main”java.util.NosuchelementException异常:在mathiverse.main(mathiverse.java.53)的java.base/java

  • 我只是通过nodejs.org上的包安装了node和npm,每当我试图搜索或安装带有npm的东西时,它会抛出以下错误,除非我sudo该命令。我觉得这是个权限问题?我已经是管理员了。

  • 我将很快使用安装了bootstrap 3的Drupal8进行一个项目。所以我设置了一个测试服务器(位于此处:test server)开始熟悉自己。 我想出了一堆事情,但有一个问题与引导导航和标志。徽标在Navbar下方。 所以我知道它在容器外面,但我不明白这是怎么发生的/为什么发生的。我开始研究bootstrap版本和jquery版本,但这些似乎都很好。 还有其他人碰到过这个吗?(我知道,现在还在

  • 我正在使用改造下载一些媒体文件,如视频,mp3,jpg,pdf。在我的应用程序中,当我想下载一个MP4格式的55MB的大文件时,Trere是一个问题。当我想下载这个文件时,我会遇到如下错误: 最后,这是我的createServiceFile方法: 如果你能帮助我,我真的很感激:)

  • 问题内容: 运行RssReader的Android项目时出现错误。 码: 它显示以下错误: 如何解决此问题? 问题答案: 当应用程序尝试在其主线程上执行联网操作时,将引发此异常。在AsyncTask以下位置运行代码: 如何执行任务: 在MainActivity.java文件中,您可以在oncreate()方法中添加此行 不要忘记将其添加到AndroidManifest.xml文件中:

  • 问题内容: 应用程序通过使用jsf形式读取参数来发送字母。我不明白为什么以及如何解决它,因为当您在开发环境中运行时,一切正常。当我将应用程序放置在VPS服务器上时,会出现下一个错误堆栈(尽管该应用程序可以根据需要在本地主机上运行): 问题答案: 我创建并编译使用版本jdk_8u151和JRE的项目。那时,就像在服务器上一样,项目是在后来的jre下启动的。使用相同版本的jre解决了该问题。泰