如何让 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。