【发布时间】:2018-10-29 02:25:02
【问题描述】:
我尝试将 ProTractor 中的文件上传到应用程序,该应用程序是用 Angular 和 Electron 开发的。
要手动执行此操作,我需要单击“浏览”按钮,然后在 Windows 对话框“打开”中选择一个文件。
我已经管理了提供文件路径的部分,然后使用 AutoIt 在对话框上单击“打开”按钮
var autoIt = require('autoit');
autoIt.Init();
autoIt.WinActivate("Open");
autoIt.WinWait("Open");
autoIt.ControlSetText("Open", "", "1148", appPath);
autoIt.ControlClick("Open", "", "1");
但这部分代码在点击“浏览”按钮后不会执行
element(by.id('browseText')).click();
我猜 ProTractor 会等待 Angular 或页面加载,但是因为在单击按钮后会打开 Windows 对话框,因此会阻止进一步代码的执行。之后我也不能只在控制台中输出一些东西。
是否有禁用等待页面加载并在点击后立即执行操作的选项?
不幸的是,禁用等待 Angular 并没有帮助同步忽略
browser.waitForAngularEnabled(false);
browser.ignoreSynchronization = true;
提前感谢您的支持。
更新
问题出在时间上,因为当我尝试执行下面的小代码时
browser.waitForAngularEnabled(false);
element(by.id('browseText')).click()
.then(function () {
console.log("clicked");
});
browser.sleep(5000)
.then(function () {
console.log("5 sec are over!");
}); // wait 5 sec
browser.sleep(3000);
console.log("End");
会发生以下情况:
- 首先将“结束”添加到控制台,无需等待 3 秒。
- 之后会打开对话框,这意味着按钮被点击了
- 最后,测试将失败并出现错误“函数超时,确保承诺在 90000 毫秒内解决”。
这是这段代码的输出:
[09:37:14] I/launcher - Running 1 instances of WebDriver
[09:37:14] I/direct - Using ChromeDriver directly...
..End
..F
Failures:
1) Scenario: Add an application # features\tst_General.feature:10
V Before # features\steps\DataGrid.js:20
V Before # features\steps\General.js:25
V When The "bounce" application has been added # features\steps\General.js:65
V After # features\steps\General.js:29
× After # node_modules\protractor-cucumber-framework\lib\resultsCapturer.js:2
5
Error: function timed out, ensure the promise resolves within 90000 milli
seconds
at Timeout._onTimeout (C:\Users\10050296\Documents\workspace\sm-protr
actor-automation\node_modules\cucumber\src\user_code_runner.js:61:18)
at ontimeout (timers.js:498:11)
at tryOnTimeout (timers.js:323:5)
at Timer.listOnTimeout (timers.js:290:5)
1 scenario (1 failed)
1 step (1 passed)
1m30.217s
【问题讨论】:
标签: javascript protractor cucumber