如何在ProTractor中禁用等待页面加载

时间:2018-10-23 20:09:28

标签: javascript protractor cucumber

我尝试将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等待角度加载或页面加载,但是因为在单击按钮后打开了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");

发生以下情况:

  1. 首先,“ End”将被添加到控制台,而无需等待3秒。
  2. 此后,将打开对话框,这意味着单击了按钮
  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

1 个答案:

答案 0 :(得分:0)

让我们说清楚。 这是100%的工作:

browser.waitForAngularEnabled(false);

据我了解,量角器部分也可以工作。单击Browser按钮。 因此,Autoit部分中的问题。问题是-“如何运行Autoit?” 只需添加sleep来检查waiting方面是否是Autoit问题:

element(by.id('browseText')).click();
browser.sleep(5000); // wait 5 sec
...
autoit code
...

如果有效,则Autoit中的问题正在等待。