NoSuchFieldException:驱动程序

Posted

技术标签:

【中文标题】NoSuchFieldException:驱动程序【英文标题】:NoSuchFieldException:driver 【发布时间】:2020-11-14 12:21:10 【问题描述】:

我像往常一样运行我的回归和冒烟测试,但在这个过程的中间,它自己的过程失败了。我收到上述错误。我更新了我的 chrome 驱动程序以及 chrome 本身。但是我一直收到同样的错误,这是我第一次遇到这样的问题,我已经查看了代码,但我找不到任何合理的错误。有什么建议吗?

在这里找到我的部分基本代码...

public class base 

    public static WebDriver driver;
    public  Properties prop;

    public WebDriver initializeDriver() throws IOException 
    
        prop = new Properties();
            //FileInputStream System.getProperty("user.dir")
        FileInputStream file = new FileInputStream(System.getProperty("user.dir")+"/src/main/java/resources/data.properties");
        prop.load(file);
        String browserName = prop.getProperty("browser");
        //Field field = Class.getField("driver");
        //String browserName = System.getProperty("browser");
        System.out.println(browserName);
        if (browserName.equals("Chrome"))
            //Execute
            System.setProperty("webdriver.chrome.driver","/Users/lisandrosilva/Documents/Drivers/chromedriver 6");
            //ChromeOptions options = new ChromeOptions();
            driver = new ChromeDriver();
        
        if(browserName.equals("headless")) 
            System.setProperty("webdriver.chrome.driver","/Users/lisandrosilva/Documents/Drivers/chromedriver 5");
            ChromeOptions options = new ChromeOptions();
                    options.addArguments("--headless");

                    options.addArguments("--disable-gpu");
                    driver = new ChromeDriver(options); 
                        
        else if (browserName.equals("Safari")) 
            //Execute
            //driver = new SafariDriver();
        
        else if (browserName.equals("FireFox")) 
            System.setProperty("webdriver.gecko.driver","/Users/lisandrosilva/Documents/Drivers/geckodriver 3");
                        driver = new FirefoxDriver();   
            //Execute
                // driver = new FirefoxDriver();
        

【问题讨论】:

请清理您的代码以使其更具可读性并添加您看到的任何堆栈跟踪 还要指出是哪一行产生了错误。 【参考方案1】:

NoSuchFieldException

NoSuchFieldException 表示该类没有指定名称的字段。

如果此错误发生在您的测试中间,则可能是您的程序访问了错误的文件。我建议将属性文件重命名为 myProp.properties 而不是 data.properties 并执行您的测试。

【讨论】:

嗯,这似乎让事情变得更糟,实际上没有测试以文件为 myProp.properties... @LisandroFernando 所以你可能没有使用自己的data.properties,而是使用缓存的data.properties 好的,先生,您对缓存的 data.properties 有任何可能的解决方案吗?我正在调用我的驱动程序静态来不填充浏览器内存。 我也手动打开了 chrome 浏览器,进入设置并删除了所有缓存和 cookie,但问题仍然存在......有什么想法吗? 我刚刚发现为什么我会遇到这样的问题。这是一个 TestNG 侦听器,我有这个方法 getDeclaredField 使回归在运行时失败。相反,我使用了 getField 方法,该方法被视为超类。感谢关注【参考方案2】:

我遇到了同样的问题,现在已经解决了,正如Lisandro Fernando 在他们的comment 中提到的那样。

使用getField 方法代替getDeclaredField 方法。

【讨论】:

以上是关于NoSuchFieldException:驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Java 反射 java.lang.NoSuchFieldException:

获取 java.lang.NoSuchFieldException:Android Arch 生命周期的 ON_START

Java进阶 六 Java反射机制可恶问题NoSuchFieldException

AS的kotlin的报错提示:java.lang.NoSuchFieldException: 表名

使用 Gradle、Groovy 和 spring-boot 加载失败并出现 java.lang.NoSuchFieldException:classCache

java.lang.NoSuchFieldException: uid