a11y自动化使用axe-selenium和java

huangapple 未分类评论47阅读模式
英文:

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 文件在这个位置:a11y自动化使用axe-selenium和java。从截图来看,它似乎没有问题。

有几个可能导致此错误的原因:

  1. JavaScript 文件加载问题:请确保 JavaScript 文件 ("axe.min.js") 已经成功加载到页面上。您可以在浏览器的开发者工具中检查网络请求来确认文件是否已加载。

  2. JavaScript 代码问题:如果文件已加载但仍然出现错误,可能是 JavaScript 代码中存在问题。您可以检查 JavaScript 控制台以获取更多信息。

  3. HTML/页面问题:AXE 需要分析页面的 HTML 结构来检测无障碍问题。如果页面的 HTML 结构存在问题,可能会导致解析错误。

  4. 依赖问题:确保您的项目中已经正确导入了所有必要的依赖,包括 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(&quot;/axe.min.js&quot;);

@BeforeClass
public void setUp() {
	System.setProperty(&quot;webdriver.chrome.driver&quot;, System.getProperty(&quot;user.dir&quot;) + &quot;//Drivers//chromedriver.exe&quot;);
	driver = new ChromeDriver();
}

@Test
public void testAccessibility() {
	driver.get(&quot;https://www.amazon.com&quot;);
	JSONObject responseJSON = new AXE.Builder(driver, scriptUrl).analyze();

	JSONArray violations = responseJSON.getJSONArray(&quot;violations&quot;);

	if (violations.length() == 0) {
		Assert.assertTrue(true, &quot;No violations found&quot;);
	} 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 -

a11y自动化使用axe-selenium和java

答案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(&quot;webdriver.chrome.driver&quot;,                 
                   &quot;C://driver//chromedriver_win32//chromedriver.exe&quot;);
		driver = new ChromeDriver();
	}

huangapple
  • 本文由 发表于 2020年7月26日 21:39:08
  • 转载请务必保留本文链接:https://java.coder-hub.com/63100902.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定