【问题标题】:How to disable wait for page loading in ProTractor如何在 ProTractor 中禁用等待页面加载
【发布时间】: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");

会发生以下情况:

  1. 首先将“结束”添加到控制台,无需等待 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

【问题讨论】:

    标签: javascript protractor cucumber


    【解决方案1】:

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

    browser.waitForAngularEnabled(false);
    

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

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

    如果有效,那么问题在Autoit 等待。

    【讨论】:

    • 您好 Oleksii,感谢您的回答,但我仍然有这个问题。如果我以您提到的这种方式使用它,则不会单击“浏览”按钮。看起来 Autoit 代码是在单击“浏览”按钮之前执行的,因为如果在执行期间我手动单击该按钮,那么 Autoit 端将毫无问题地执行,之后将再次单击“浏览”按钮剧本。最后,看起来这两个部分都可以正常单击按钮以及 Autoit 代码,但是存在一些同步问题。
    • 这就是为什么您应该:1) 单击 2) 等待 3) 运行 Autoit。第二点可以按照我写的browser.sleep(ms)来实现
    • 不幸的是,它不起作用或者我做错了什么。您可以查看我的问题中的更新部分,在该部分中我通过等待和随后的日志输出实现了点击。结果是browser.sleep(3000) 将被忽略。而console.log("clicked") 只有在我手动关闭窗口对话框后才会输出。
    • 在您更新的代码中,我看到then 后面有空格,您能否将其删除并再次运行。还可以在控制台中显示您获得的内容。
    • 您好,很遗憾,then 后面没有空格,结果也是一样的。我已将输出添加到我的问题中。
    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 2019-06-11
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多