【发布时间】:2020-08-20 11:59:23
【问题描述】:
我有这个测试用例
it("should have list", async () => {
// wait until list populated
browser.wait(protractor.until.elementLocated(by.css(COMPONENT_CSS.ITEM)));
console.log("First...............");
try {
await componentPage.toggleDD();
} catch (err) {
console.log("err", err);
}
console.log("Second...............");
const count = await componentPage.getCount();
console.log("count", count);
expect(count).toBe(this.COUNT);
await componentPage.toggleDD();
});
这里是toggleDD
async toggleDD(): Promise<any> {
const _dropdown = await element(by.id(this.CSS.DD_ID));
await _dropdown.click();
}
但这表明
err ScriptTimeoutError: script timeout
(Session info: chrome=84.0.4147.135)
(Driver info: chromedriver=84.0.4147.30 (48b3e868b4cc0aa7e8149519690b6f6949e110a8-refs/branch-heads/4147@{#310}),platform=Windows NT 6.3.9600 x86_64)
at Object.checkLegacyResponse (E:\PROJECTS\NewProject\node_modules\selenium-webdriver\lib\error.js:546:15)
at parseHttpResponse (E:\PROJECTS\NewProject\node_modules\selenium-webdriver\lib\http.js:509:13)
at E:\PROJECTS\NewProject\node_modules\selenium-webdriver\lib\http.js:441:30
at processTicksAndRejections (internal/process/task_queues.js:94:5)
From: Task: Protractor.waitForAngular() - Locator: By(css selector, *[id="my-dropdown"])
测试用例失败,我尝试将await 放在browser.wait 之前,尝试by.xpath、by.id、by.css 以获得下拉菜单。
我在调试模式下尝试过,元素存在于 DOM 上,但不知何故它没有获取元素。
检查其他元素以获取它显示的每个元素
- Failed: script timeout
(Session info: chrome=84.0.4147.135)
(Driver info: chromedriver=84.0.4147.30 (48b3e868b4cc0aa7e8149519690b6f6949e110a8-refs/branch-heads/4147@{#310}),platform=Windows NT 6.3.9600 x86_64)
我试过了
<div id="dummyId">Hello</div>
这个 div 由
const _divText = await element(by.id("dummyId")).getText();
即使这样我也得到 scripttimeout err
更多信息
这里是beforeAll
beforeAll(async () => {
componentPage = new HomePage();
helperService = new HelperService();
COMPONENT_CSS = componentPage.CSS;
await helperService.navigate(helperService.PAGE_URL.HOME);
try {
await helperService.skipIntro();
} catch (err) {
console.error("Intro element not found");
}
// browser.waitForAngular();
});
和protractor.conf.js
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts
const { SpecReporter } = require("jasmine-spec-reporter");
exports.config = {
allScriptsTimeout: 50000,
specs: [
"./src/login/login.component.e2e-spec.ts",
"./src/home/home.component.e2e-spec.ts",
],
capabilities: {
"browserName": "chrome"
},
directConnect: true,
baseUrl: "http://localhost:4200/",
framework: "jasmine",
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 1000000,
print: function () {
}
},
onPrepare() {
require("ts-node").register({
project: require("path").join(__dirname, "./tsconfig.e2e.json")
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};
【问题讨论】:
-
乍一看,我假设这是 async / await 而不是控制流。应该等待
browser.wait。我猜这就是为什么当调用toggleDD时元素在屏幕上不可见的原因。试试看。如果你卡住了,我也可以写一个答案 -
@cnishina,试过不行
-
@cnishina 无法在演示项目中生成,虽然更新了问题,包括 protractor.conf.js 和 beforeAll 函数,任何其他方式都可以查看它
-
抱歉,我花了一段时间才回复。它是什么样的下拉菜单?是像material.angular.io/components/select/overview 这样的有角材质下拉菜单吗?
-
@cnishina 是角材料,试图在演示项目中重现,但我无法..
标签: testing jasmine protractor angular-e2e