javascript - 如何解决 Protractor 测试无限期挂起的问题?

标签 javascript selenium jasmine protractor

我遇到了一个问题,我之前运行的测试用例我知道它正在运行,现在在执行时无限期地卡住。每次测试单击特定元素时都会发生这种情况。测试只是挂起,无法继续执行脚本。除了超时错误之外没有错误发生。当我运行测试时,我会收到常规提示:

[11:58:20] I/direct - Using ChromeDriver directly...
[11:58:20] I/launcher - Running 1 instances of WebDriver
Started
A Jasmine spec timed out. Resetting the Webdriver Control Flow.
F

Failures:
1) clicks menu buttons
Message:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
Stack:
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at Timer.listOnTimeout (timers.js:92:15)

1 spec, 1 failure
Finished in 3000.147 seconds
[12:48:47] I/launcher - 0 instance(s) of Webdriver still running
[12:48:47] I/launcher - chrome #01 failed 1 test(s)
[12:48:47] I/launcher - overall: 1 failed spec(s)
[12:48:47] E/launcher - Process exited with error code 1

然后它就一直卡在那里,直到达到我设置的超时时间。以下是我正在使用的配置和部分测试脚本的副本。

配置.js

 exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    directConnect: true,
    //getPageTimeout: timeout_in_millis
    // Capabilities to be passed to the webdriver instance.
    capabilities: {
    'browserName': 'chrome'
    //'browserName': 'firefox'

    },

    //suites:{},

    specs: ['basic_testing.js'],

    allScriptsTimeout: 3000000,

   //framework: 'jasmine2',
    onPrepare: function() { 
                browser.driver.manage().window().maximize();
    var jasmineReporters = require('jasmine-reporters');
    jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
        consolidateAll: true,
        savePath: 'testresults',
        filePrefix: new Date().toJSON().substring(0,10).replace(/-/g , "")  + '_xmloutput'
    }))
},
    //Options to be passed to Jasmine.
    jasmineNodeOpts: {
       defaultTimeoutInterval: 3000000
    }
};

basic_testing.js

describe('menu page', function()
{
    it('clicks menu buttons', function()
    {
        element(by.id("nav-group-ServiceOrders")).click();

        element(by.id("nav-item-Dashboard")).click();

        //This element is clicked but then the test hangs here
        element(by.id("nav-item-OrdersConsole")).click();

        element(by.id("nav-item-PersonnelConsole")).click();

        element(by.id("nav-item-PriorityPoints")).click();

    });
});

最佳答案

如果您已经探索过Timeouts然后仍然面临问题 使用 browser.executeScript('window.stop();'); 如果在单击第一个元素后生成的页面加载了要单击的第二个元素,但需要时间加载页面中的所有元素,则停止进一步加载元素并继续单击第二个元素。您的代码将如下所示。

var EC = protractor.ExpectedConditions;
1stElement.click();
browser.wait(EC.presenceOf(2ndElement), 5000);
browser.wait(EC.visibilityOf(2ndElement), 5000);
browser.executeScript('window.stop();');
2ndElement.click();

关于javascript - 如何解决 Protractor 测试无限期挂起的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39857051/

相关文章:

node.js - 满足条件时取消所有 Protractor 测试

angularjs - 测试使用另一个使用 $http 的服务的 angular.service

javascript - d3.js:仅显示 xAxis 上的部分数据

javascript - 使用 Javascript 获取 JSF 定义的组件

javascript - 如何在selenium中打印页面并关闭打印窗口

python-3.x - 如何通过Python使用selenium点击隐藏按钮

windows - 30000 毫秒后 Protractor 超时

javascript - Javascript 中的多个全局变量

javascript - 如何转换 dd-MM-yyyy HH :mm:ss to epoch time in Javascript without regex?

java - Webdriver 由于超时而阻塞