angular - 带有 Angular/Protractor 测试套件的 ScriptTimeoutError
问题描述
我正在使用 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]])
大多数时候。
我遵循了一些解决方案,但它们没有用。
- browser.ignoreSynchronization = true
- browser.wait(EC.visibilityOf(元素),10000)
我已经发布了相关的代码片段来理解这个问题。有什么不对吗?
- 角度版本 - 7.2.16
- 量角器版本 - 5.4.4
组件规范.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);
});
});
组件模块.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;
}
}
解决方案
尝试这个!
browser.driver.sleep(5000);
在每个步骤之后使用它不是很好的自动化测试实践。因此,请尝试browser.driver.sleep(5000);
从 beforeAll、beforeEach 和 click 元素中删除。如果需要,请始终尝试使用尽可能少的睡眠。
使用预期条件[此处]:https ://www.protractortest.org/#/api?view=ProtractorExpectedConditions而不是使用睡眠。
conf.js 更改。
directConnect: true,
allScriptsTimeout: 50000,
检查[这里]:https ://www.protractortest.org/#/server-setup
隐式使用最小等待
browser.manage().timeouts().implicitlyWait(500);
推荐阅读
- vb.net - 问题将百分比转换为成绩 - 所有结果均显示为 A
- javascript - Cookie 未保存在浏览器中,但与邮递员一起工作正常
- avd - Android 虚拟设备重置相机位置
- ios - UIKitCore 位置?
- pandas - 通过应用将元组传递给函数
- excel - 如何从 Excel、VBA 复制和粘贴内容 Word 文档
- tradingview-api - 在交易视图上添加对烛台事件变化的警报
- ionic-framework - 在 Ionic 5 中在 Inkscape 上制作的带有 SVG 文件的自定义 ion-icon
- spring-boot - XMLInputFactory setProperty(XMLConstants.ACCESS_EXTERNAL_DTD,"") 给出无法识别的属性
- c# - 有没有办法在扩展方法中过滤 ThenInclude()