【问题标题】:ScriptTimeoutError with Angular/Protractor test suite带有 Angular/Protractor 测试套件的 ScriptTimeoutError
【发布时间】:2020-05-10 14:56:25
【问题描述】:

我正在使用 Protractor 来测试 Angular Web 应用程序的自动化。我的测试套件有大约 37 个测试用例。每个测试用例单独运行时都会成功运行。当我运行整个测试套件时,我得到

ScriptTimeoutError:脚本超时 …………………………………………………………………………………………………………………………………… 来自:任务:Protractor.waitForAngular() - 定位器:By(xpath, /html/body/app-root/app-home/div/div/div[2]/as-split/as-split-area[2] /app-tabhost/app-tab[1]/div/app-files/div/div[2]/ag-grid-angular/div/div[2]/div[1]/div[3]/div[ 2]/div/div/div[12]/div[1]])

大部分时间。

我遵循了几个解决方案,但它们都不起作用。

  1. browser.ignoreSynchronization = true
  2. browser.wait(EC.visibilityOf(element), 10000)

我已经发布了相关的代码 sn-ps 来理解这个问题。有什么不对吗?

  • Angular 版本 - 7.2.16
  • 量角器版本 - 5.4.4

Component_spec.js

var LoginModule = require("./LoginModule.js");
var ComponentModule = require("./ComponentModule.js");

describe('Component Spec', function () {
var componentModule = new ComponentModule();

beforeAll(async function () {
    console.log("===Loading home page");
    browser.driver.sleep(8000);
});

beforeEach(async function () {
    browser.get(LoginModule.homeUrl);
    browser.driver.sleep(8000);
});

it('editinput', async function () {
    var AlertMessage = element(by.cssContainingText('.col-sm-11', 'underline'));
    componentModule.editinput("value");
    expect(AlertMessage.isPresent()).toBe(false);
    browser.driver.sleep(5000);
});
});

ComponentModule.js

this.editinput = async function (value) {
    let selectCheckbox2 = element(by.xpath('/html/body/app-root/app-home/div/div/div[2]/as-split/as-split-area[2]/app-tabhost/app-tab[1]/div/app-files/div/div[2]/ag-grid-angular/div/div[2]/div[1]/div[3]/div[2]/div/div/div[12]/div[1]'));
    await selectCheckbox2.click();
    await browser.driver.sleep(5000);
    browser.ignoreSynchronization = true;
    let selectNext = element(by.xpath('//*[@id="next"]'));
    await selectNext.click();
    await browser.driver.sleep(5000);
    browser.ignoreSynchronization = true;

    let input = element(by.xpath('/html/body/app-root/app-home/div/div/div[2]/as-split/as-split-area[2]/app-tabhost/app-tab[2]/div/div[2]/div[1]/button[2]'))
    await input.click();

    let right = element(by.className("right_button"));
    await right.click();
    await browser.driver.sleep(2000);

    let edit = element(by.className("edit_box"));
    await edit.sendKeys(value);
    await browser.driver.sleep(5000);

    let saveBtn = element(by.xpath('/html/body/app-root/app-home/div/div/div[2]/as-split/as-split-area[2]/app-tabhost/app-tab[2]/div/app-procedure/div/div[2]/div[1]/button[3]/i'));
    await saveBtn.click();
    await browser.driver.sleep(8000);
    browser.ignoreSynchronization = false;
};

conf.js

exports.config = {
   framework: 'jasmine',
   seleniumAddress: 'http://localhost:4444/wd/hub',

   capabilities: {
      browserName: 'chrome',
      acceptSslCerts: true,
      shardTestFiles: false,
      maxInstances: 1
   },
   jasmineNodeOpts: {
      showColors: true,
      defaultTimeoutInterval: 100000,
   },
   onPrepare: () => {
      browser.manage().window().maximize();
      browser.manage().timeouts().implicitlyWait(10000);
      browser.ignoreSynchronization = true;
   }
}

【问题讨论】:

    标签: angular protractor


    【解决方案1】:

    试试这个!

    在每一步之后使用browser.driver.sleep(5000); 并不是一个好的自动化测试实践。因此,请尝试从 beforeAll、beforeEach 和单击元素之后删除 browser.driver.sleep(5000);。如果需要,请始终尝试使用最少的睡眠时间。

    使用预期条件[此处]:https://www.protractortest.org/#/api?view=ProtractorExpectedConditions 而不是使用睡眠。

    conf.js 更改。

    directConnect: true,
    allScriptsTimeout: 50000,
    

    检查[这里]:https://www.protractortest.org/#/server-setup

    隐式使用最小值等待

     browser.manage().timeouts().implicitlyWait(500);
    

    【讨论】:

    猜你喜欢
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多