#javascript #protractor
Вопрос:
Я поместил URL-адрес тестируемого приложения в текстовый файл, поэтому я хотел бы, чтобы выполнение транспортира подождало без использования метода «Sleep ()», пока он не закончит чтение, чтобы Protactor мог запустить браузер на веб-сайт, используя текст из файла. Но до сих пор транспортир работает так быстро, что ему не удается получить текст из файла, поэтому он не может открыть веб-сайт в 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);
}
}
Ответ №1:
Я сделал для вас решение, оно получает URL-адрес из файла и открывает ссылку в браузере. Все мое решение для вас приведено ниже.
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 — адрес в браузере для меня.
Ответ №2:
Вы можете использовать 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")
Комментарии:
1. в нем говорится об ошибке тайм-аута через 30 секунд. и он вызывает «browser.get ()», но значение данных равно нулю. В текстовом файле есть только одна строка «www.google.com»
2. знаете ли вы, как я могу избавиться от ошибки тайм-аута с помощью вашего решения кода выше?
3. Я опубликовал другое решение, которое решает вашу проблему. В нем нет никаких ошибок тайм-аута. 🙂
4. Я также добавил немного асинхронности/ожидания в код, чтобы сделать его асинхронным
5. классно! Спасибо. Я посмотрю. Я ценю ваше время и усилия.