Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加ZXing依赖项时,Java中的Selenium停止使用Java.lang.IllegalAccessError:来自org.openqa.Selenium.net.UrlChecker类_Java_Selenium_Qr Code_Zxing_Illegalaccessexception - Fatal编程技术网

添加ZXing依赖项时,Java中的Selenium停止使用Java.lang.IllegalAccessError:来自org.openqa.Selenium.net.UrlChecker类

添加ZXing依赖项时,Java中的Selenium停止使用Java.lang.IllegalAccessError:来自org.openqa.Selenium.net.UrlChecker类,java,selenium,qr-code,zxing,illegalaccessexception,Java,Selenium,Qr Code,Zxing,Illegalaccessexception,因此,我正在使用Selenium和gradle在java上构建一个测试项目。现在我需要扫描先前截图中的二维码。我环顾了一下如何做到这一点,ZXing扫描仪代码似乎是最好的建议。(如果不是,请告诉我。)我的问题是,从我将'com.google.zxing:zxingorg:3.3.1'依赖项添加到build.gradle文件的那一刻起,即使我没有用它编写任何其他代码(我尝试过使用和不使用),web驱动程序停止工作,我收到以下消息: java.lang.IllegalAccessError: tri

因此,我正在使用Selenium和gradle在java上构建一个测试项目。现在我需要扫描先前截图中的二维码。我环顾了一下如何做到这一点,ZXing扫描仪代码似乎是最好的建议。(如果不是,请告诉我。)我的问题是,从我将'com.google.zxing:zxingorg:3.3.1'依赖项添加到build.gradle文件的那一刻起,即使我没有用它编写任何其他代码(我尝试过使用和不使用),web驱动程序停止工作,我收到以下消息:

java.lang.IllegalAccessError: tried to access method com.google.common.util.concurrent.SimpleTimeLimiter.<init>(Ljava/util/concurrent/ExecutorService;)V from class org.openqa.selenium.net.UrlChecker

at org.openqa.selenium.net.UrlChecker.<init>(UrlChecker.java:67)
at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:175)
at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:166)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:241)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:128)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:141)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:174)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:163)
at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:152)
at Specification.ClientFactory.initContext(ClientFactory.groovy:81)
at Specification.ClientFactory.<init>(ClientFactory.groovy:61)
at Specification.BaseTest.setupSpec(BaseTest.groovy:14)


Test ignored.
错误中提到的第61行是指Chrome WebDriver的初始化:

ClientFactory(){
    initUrl()   //allows to change the URL of the application under test when needed
    initContext(urlWebsite,initWebBrowser())    //switchcase to read the browser from a config file
    initClient()    //initialization of the different classes with the elements I'm accessing
}
webDriver = new ChromeDriver(options)
(我尝试禁用这些选项,但得到的错误完全相同,因此我认为问题不在于此。)

我已经找了很长一段时间了,但是我没有找到任何关于这个错误的信息。Selenium和ZXing依赖项之间是否存在我不知道的冲突?如果是这样,有没有办法超越它?怎么做


更新:对于遇到类似问题的人,如果您回归到selenium java和ZXing的早期版本,则不会出现此问题。我设法克服了build.gradle文件中“org.seleniumhq.selenium:selenium java:3.0.1”和“com.google.zxing:zxingorg:3.2.1”的问题,它们不是最新的,但它是这样工作的

错误说明了一切:

java.lang.IllegalAccessError: tried to access method com.google.common.util.concurrent.SimpleTimeLimiter.<init>(Ljava/util/concurrent/ExecutorService;)V from class org.openqa.selenium.net.UrlChecker
java.lang.IllegalAccessError:试图从org.openqa.selenium.net.UrlChecker类访问方法com.google.common.util.concurrent.SimpleTimeLimiter.(Ljava/util/concurrent/ExecutorService;)V
主要的例外来自
类org.openqa.selenium.net.UrlChecker
。如果您查看的是JavaDocs,即extensed java.lang.Object,它在收到HTTP 200响应之前轮询URL。

嵌套类是扩展java.lang.Exception的类

所以,一旦构造函数失败,就会引发,这意味着应用程序试图调用它无权访问的方法

通常,Java编译器会捕获此错误,并且只有在类的定义发生更改时,才会在运行时发生此错误

一个直接的解决方案是检查对
url
的调用,并确保通过
void org.openqa.selenium.WebDriver.get(字符串arg0)
解析
get(“您的url”)


还要确保子网或防火墙设置未阻止http请求。

任何阅读此内容的人。我在依赖性方面也面临同样的问题:

我非常依赖com.google.guava:guava:23.3或更高版本

+--- com.github.ben-manes.caffeine:guava:2.6.0
|    +--- com.github.ben-manes.caffeine:caffeine:2.6.0
|    \--- com.google.guava:guava:23.3-jre (*)
并且使用org.seleniumhq.selenium:selenium java:3.0.1,这与此处讨论的guava版本>22.0不兼容:


解决方案:将selenium升级到最新版本解决了上述问题

可能是依赖关系在层次结构中处于较高的位置,并且调用的类名重复,而不是您需要的实际类。您可以改为使用完全限定名,如下面的.package.name.Class。我过去在Android dependencies方面也遇到过类似的问题。更新:对于碰巧遇到类似问题的人来说,如果您回归到selenium java和ZXing的早期版本,这个问题就不会发生。我设法克服了build.gradle文件中“org.seleniumhq.selenium:selenium java:3.0.1”和“com.google.zxing:zxingorg:3.2.1”的问题,它们不是最新的,但它是这样工作的。正如我所说,http请求不能被本地配置阻止,如果我从build.gradle中去掉com.google.zxing:zxingorg:3.3.1行,一切正常。因此,我想我可以假设对URL的调用正在正确执行。所以,我想我可以从你有益的评论中看出,某些类的定义实际上已经改变了。我猜在ZXing代码中的某个地方有干扰SeleniumUrlChecker类的东西。所以我想我的下一步是浏览整个库并搜索复制的内容。不是我,我甚至没有足够的代表来显示我的投票。不。。。这个答案是错误的。子网和防火墙不可能导致此异常。问题在于需要相互冲突的Guava版本的库。(正如OP现在指出的那样。)