英文:
a11y automation using axe-selenium and java
问题
从GitHub上的 https://github.com/dequelabs/axe-selenium-java 这个仓库中,我看到了您的代码。代码如下:
public class CheckAxe {
@Rule
public TestName testName = new TestName();
private WebDriver driver;
private static final URL scriptUrl = CheckAxe.class.getResource("/axe.min.js");
@BeforeClass
public void setUp() {
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "//Drivers//chromedriver.exe");
driver = new ChromeDriver();
}
@Test
public void testAccessibility() {
driver.get("https://www.amazon.com");
JSONObject responseJSON = new AXE.Builder(driver, scriptUrl).analyze();
JSONArray violations = responseJSON.getJSONArray("violations");
if (violations.length() == 0) {
Assert.assertTrue(true, "No violations found");
} else {
AXE.writeResults(testName.getMethodName(), responseJSON);
Assert.assertTrue(false, AXE.report(violations));
}
}
@AfterClass
public void tearDown() {
driver.quit();
}
}
您遇到的错误是 JavascriptException,错误信息为 "Unexpected token '<'"。这通常表示您的代码在 JavaScript 语法方面出现了问题。
您提到的 JavaScript 文件在这个位置:。从截图来看,它似乎没有问题。
有几个可能导致此错误的原因:
-
JavaScript 文件加载问题:请确保 JavaScript 文件 ("axe.min.js") 已经成功加载到页面上。您可以在浏览器的开发者工具中检查网络请求来确认文件是否已加载。
-
JavaScript 代码问题:如果文件已加载但仍然出现错误,可能是 JavaScript 代码中存在问题。您可以检查 JavaScript 控制台以获取更多信息。
-
HTML/页面问题:AXE 需要分析页面的 HTML 结构来检测无障碍问题。如果页面的 HTML 结构存在问题,可能会导致解析错误。
-
依赖问题:确保您的项目中已经正确导入了所有必要的依赖,包括 AXE 和 Selenium 相关的依赖。
请根据上述可能的原因逐步排查问题,以确定是哪个环节出现了错误。如果有更多的错误信息或上下文,我可以更详细地帮助您分析问题。
英文:
followed a simple program from the git hub - https://github.com/dequelabs/axe-selenium-java
public class CheckAxe {
@Rule
public TestName testName = new TestName();
private WebDriver driver;
private static final URL scriptUrl = CheckAxe.class.getResource("/axe.min.js");
@BeforeClass
public void setUp() {
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "//Drivers//chromedriver.exe");
driver = new ChromeDriver();
}
@Test
public void testAccessibility() {
driver.get("https://www.amazon.com");
JSONObject responseJSON = new AXE.Builder(driver, scriptUrl).analyze();
JSONArray violations = responseJSON.getJSONArray("violations");
if (violations.length() == 0) {
Assert.assertTrue(true, "No violations found");
} else {
AXE.writeResults(testName.getMethodName(), responseJSON);
Assert.assertTrue(false, AXE.report(violations));
}
}
@AfterClass
public void tearDown() {
driver.quit();
}
}
While execution , get error as below -
> org.openqa.selenium.JavascriptException: javascript error: Unexpected token '<'
(Session info: chrome=84.0.4147.89)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:489)
at com.deque.axe.AXE.injectIntoFrames(AXE.java:111)
at com.deque.axe.AXE.inject(AXE.java:74)
at com.deque.axe.AXE$Builder.execute(AXE.java:368)
at com.deque.axe.AXE$Builder.analyze(AXE.java:335)
at utils.CheckAxe.testAccessibility(CheckAxe.java:35)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:134)
at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:597)
at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)
at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:816)
at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1507)
at org.testng.TestRunner.privateRun(TestRunner.java:766)
at org.testng.TestRunner.run(TestRunner.java:587)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:384)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:378)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:337)
at org.testng.SuiteRunner.run(SuiteRunner.java:286)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1187)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1109)
at org.testng.TestNG.runSuites(TestNG.java:1039)
at org.testng.TestNG.run(TestNG.java:1007)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Can you please suggest , what I am missing here? My js file is in the below location . sample screenshot -
答案1
得分: 0
看起来像是Chrome Driver可执行文件的问题。
在Google Chrome浏览器上运行Selenium测试脚本时,无法没有ChromeDriver可执行文件。
请从[ChromeExe][1]下载ChromeDriver exe文件。
您可以将此文件保存在“C://driver//chromedriver_win32”文件夹中。
在您的ExampleTest.java类的setup方法中:
public void setUp() {
// 需要ChromeDriver来测试Shadow DOM测试支持
System.setProperty("webdriver.chrome.driver",
"C://driver//chromedriver_win32//chromedriver.exe");
driver = new ChromeDriver();
}
[1]: https://chromedriver.storage.googleapis.com/index.html?path=84.0.4147.30/
英文:
Seems Like Chrome Driver executable issues.
It is impossible to run Selenium test scripts on the Google Chrome browser without ChromeDriver executable.
Please download the ChromeDriver exe file form ChromeExe
You can keep this file in "C://driver//chromedriver_win32" folder
In your ExampleTest.java class in setup method
public void setUp() {
// ChromeDriver needed to test for Shadow DOM testing support
System.setProperty("webdriver.chrome.driver",
"C://driver//chromedriver_win32//chromedriver.exe");
driver = new ChromeDriver();
}
专注分享java语言的经验与见解,让所有开发者获益!
评论