如何让 Protractor JavaScript 等待读取文件完成?
how to make Protractor JavaScript waits for read file to complete?
我将测试的应用程序 URL 放在一个文本文件中,所以我希望 Protractor 的执行在不使用“Sleep()”方法的情况下等待,直到它完成读取,以便 Protactor 可以使用文件中的文本。但到目前为止,Protractor 执行速度太快,无法从文件中获取文本,因此无法打开 Chrome
上的网站
function retrieveAppURL(){
const fs = require('fs')
var data = null;
fs.readFile("appURL.txt", (err, text) => {
if (err){
console.log("error " + err);
}
else
{
console.log("text file data = " + text.toString());
data = text.toString();
}
});
return data;
}
function launchAppURL(){
var data = retrieveAppURL();
browser.get(data );
browser.waitForAngularEnabled(false);
} catch (err) {
console.log("exception " + err.message);
}
}
您可以使用 browser.wait() 等待文件像这样读取。
await browser.wait(async function () {
return fs.readFile("appURL.txt", (err, text) => {
if (err){
console.log("error " + err);
}
else
{
console.log("text file data = " + text.toString());
data = text.toString();
}
});
}, 30*1000, "File has not been read within 30 seconds")
我已经为你做了一个解决方案,它从文件中获取 URL 并在浏览器中打开 link。
我为您提供的完整解决方案如下。
url-spec.js
describe('Open an URL from a text file', function() {
async function retrieveAppURL(){
const fs = require('fs')
return browser.wait(async function () {
return new Promise((resolve, reject) => {
fs.readFile("appURL.txt", (err, text) => {
if (err){
console.log("error " + err);
}
else
{
console.log("text file data = " + text.toString());
resolve(text.toString())
}
});
})
}, 10000, "File has not been read within 10 seconds")
}
async function launchAppURL(){
try{
const data = await retrieveAppURL();
await browser.get(data);
// sleep for 5 sec to see the result
await browser.sleep(5000);
} catch (err) {
console.log("exception " + err.message);
}
}
it('should add a todo', function() {
launchAppURL();
});
});
conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['url-spec.js']
};
appURL.txt
https://google.com
运行 它由 protractor conf.js
请不要忘记为项目安装 fs 和量角器。
它工作得非常快。我只是 运行 protractor conf.js
它会在浏览器中为我打开 URL。
我将测试的应用程序 URL 放在一个文本文件中,所以我希望 Protractor 的执行在不使用“Sleep()”方法的情况下等待,直到它完成读取,以便 Protactor 可以使用文件中的文本。但到目前为止,Protractor 执行速度太快,无法从文件中获取文本,因此无法打开 Chrome
上的网站function retrieveAppURL(){
const fs = require('fs')
var data = null;
fs.readFile("appURL.txt", (err, text) => {
if (err){
console.log("error " + err);
}
else
{
console.log("text file data = " + text.toString());
data = text.toString();
}
});
return data;
}
function launchAppURL(){
var data = retrieveAppURL();
browser.get(data );
browser.waitForAngularEnabled(false);
} catch (err) {
console.log("exception " + err.message);
}
}
您可以使用 browser.wait() 等待文件像这样读取。
await browser.wait(async function () {
return fs.readFile("appURL.txt", (err, text) => {
if (err){
console.log("error " + err);
}
else
{
console.log("text file data = " + text.toString());
data = text.toString();
}
});
}, 30*1000, "File has not been read within 30 seconds")
我已经为你做了一个解决方案,它从文件中获取 URL 并在浏览器中打开 link。 我为您提供的完整解决方案如下。
url-spec.js
describe('Open an URL from a text file', function() {
async function retrieveAppURL(){
const fs = require('fs')
return browser.wait(async function () {
return new Promise((resolve, reject) => {
fs.readFile("appURL.txt", (err, text) => {
if (err){
console.log("error " + err);
}
else
{
console.log("text file data = " + text.toString());
resolve(text.toString())
}
});
})
}, 10000, "File has not been read within 10 seconds")
}
async function launchAppURL(){
try{
const data = await retrieveAppURL();
await browser.get(data);
// sleep for 5 sec to see the result
await browser.sleep(5000);
} catch (err) {
console.log("exception " + err.message);
}
}
it('should add a todo', function() {
launchAppURL();
});
});
conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['url-spec.js']
};
appURL.txt
https://google.com
运行 它由 protractor conf.js
请不要忘记为项目安装 fs 和量角器。
它工作得非常快。我只是 运行 protractor conf.js
它会在浏览器中为我打开 URL。