黄瓜守夜。我想检查网页上是否存在 Excel 工作表中列出的元素。为此,编写了一个顺序承诺(使用reduce)以确保页面加载并且每个元素都得到验证。
运行测试时,如果元素存在,则使用 waitForElementVisible 可以正常进行元素验证。当元素不存在时,会遇到“等待元素存在 60000 毫秒超时”。
由于使用了reduce/Promise.resolve(),除非迭代所有记录,否则承诺不会得到解决。如果sheetData很小,下面的代码可以工作。但是,对于更多记录,会导致该函数超时。
const sheetData = file[sheetName];
return sheetData
.reduce((promiseChain, record, index) => {
return promiseChain.then(() => {
return page.load(param)// Adjust timeout as needed
.then(() => {
return page.waitForPageLoad();
})
.then(async() => {
await client.waitForElementVisible(record["Locator"]);
})
.then(() => {
results.push({ "status": "fulfilled", index: index + 1 });
})
.catch((error) => {
results.push({ "status": "rejected", index: index + 1, error});
return Promise.resolve();
});
});
}, Promise.resolve())
.then(() => {
const failures = results.filter((result) => result.status === "rejected");
if (failures.length > 0) return Promise.reject(failures);
return Promise.resolve(true);
}).catch((finalError) => {
console.error("Final errors encountered: ", finalError);
});
由于要验证的元素/页面列表是动态变化的(adobe Analytics),我无法在步骤级别给出超时(如少数答案中所建议的),因为这取决于 Excel 记录,任何步骤级别超时都可能停止读取记录.
您能否建议如何绕过“函数超时”错误,而只跟踪不可用的元素,即使未找到也继续检查剩余元素?
相机权限:
<uses-permission android:name="android.permission.CAMERA"/>
MediaRecorder recorder = new MediaRecorder(); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
VideoView videoView = findViewById(R.id.video_view); videoView.setVideoPath(videoFile.getAbsolutePath());