以下是示例代码,正在用于硒WebDriver JS ax集成来测试我的网站的可访问性-
var AxeBuilder = require('axe-webdriverjs');
var WebDriver = require('selenium-webdriver');
var driver = new WebDriver.Builder()
.forBrowser('firefox')
.build();
driver
.get('https://dequeuniversity.com/demo/mars/')
.then(function() {
AxeBuilder(driver).analyze(function(err, results) {
if (err) {
// Handle error somehow
}
console.log(results);
});
});
这里正在解析一个URL。有人可以帮我解析多个网址吗?我希望将所有URL的结果打印为driver.get()的输入。任何帮助,将不胜感激!
答案 0 :(得分:1)
因此,我将@CertainPerformance的注释格式化为答案。
最简单的方法是使用现代的async/await
语法:
for (const url of [url1, url2, url3]) {
await driver
.get(url)
.then(async function() {
await AxeBuilder(driver).analyze(function(err, results) {
if (err) {
// Handle error somehow
}
console.log(results);
});
});
}
别忘了用您的网址替换url1, url2, url3
。
P.S。如@ jfriend00所述(在下面的评论中),我们不知道AxeBuilder
函数是否实际上返回了Promise。因此,在后一种情况下,前面的await
(和async
)可能是不必要的。
答案 1 :(得分:1)
使用Promise.all并映射一个url数组。
const urlArray = [url1,url2,url3,...];
const finalResult = await Promise.all(urlArray.map(async url=>{
return await driver.get(url);
}))
您将在数组finalResult
中获得所有结果。
答案 2 :(得分:0)
上述解决方案可以使用,但是会序列化,即您将获得driver.get
承诺的结果,然后analyze
将会得到一个URL的结果,然后再移至下一个。也许您可以使用promise.all
并行执行所有操作。
function executeGetPromises() {
var getPromises = [];
var drivers = [];
for (const url of [url1, url2, url3]) {
var driver = new WebDriver.Builder().forBrowser('firefox').build();
getPromises.push(driver.get(url));
drivers.push(driver);
}
var analysePromises = [];
int index = 0;
Promise.all(getPromises.map(p => p.catch(e => e)))
.then(results => {
for (int i=0; i< results.length; i++) {
var result = results[i];
if (!(result instanceof Error)) {
analysePromises.push(AxeBuilder(drivers[i]).analyze);
}
}
executeAnalysePromises(analysePromises);
});
}
function executeAnalysePromises (analysePromises) {
Promise.all(analysePromises.map(p => p.catch(e => e)))
.then(results => {
results.forEach(result => {
if (!(result instanceof Error)) {
console.log(result);
}
});
});
}
在这里,我们跟踪所有drivers
,所有driver.get
承诺都是并行运行的,一旦所有getPromises
返回(已解决/拒绝),{ {1}}并行执行。
编辑:使用异步函数的更简单方法。上面有点复杂,您可以使用异步功能实现同样的功能
analysePromises