waitForAngular 和 "then" 都不能按预期工作

Posted

技术标签:

【中文标题】waitForAngular 和 "then" 都不能按预期工作【英文标题】:Neither waitForAngular nor "then" work as expected 【发布时间】:2015-11-27 06:29:48 【问题描述】:

我尝试了this Q&A 中提到的所有变体:

第一个

 element(by.css('[ng-click="vm.openNewPage()"]')).click().then(function () 
        expect(element(by.css('[ng-click="vm.submitButtonOfThatPage()"]')).isPresent()).toBe(true);
    );

第二个

element(by.css('[ng-click="vm.openNewPage()"]'));
browser.waitForAngular();        
expect(element(by.css('[ng-click="vm.submitButtonOfThatPage()"]')).isPresent()).toBe(true);

第三个:

element(by.css('[ng-click="vm.openNewPage()"]'));
browser.sleep(1)
browser.waitForAngular();        
expect(element(by.css('[ng-click="vm.submitButtonOfThatPage()"]')).isPresent()).toBe(true);

它们都没有通过测试:预期 false 为 true。 除了这个有 browser.sleep(1000)

element(by.css('[ng-click="vm.openNewPage()"]'));
browser.sleep(1000)
expect(element(by.css('[ng-click="vm.submitButtonOfThatPage()"]')).isPresent()).toBe(true);

为睡眠时间设置几秒钟显然不是解决方案。

我缺少什么或者我应该怎么做才能成功评估测试

Protractor 版本为:2.1.0 版,带有 Jasmine2 框架

这是我开始测试的命令:

C:\projects\eucngts\e2e\app>protractor conf.js --baseUrl=http://localhost:56225/euc/

这些是我的相关代码:

// conf.js
exports.config = 
    directConnect: true,
    seleniumAddress: 'http://localhost:4444/wd/hub',
    framework: 'jasmine2',
    specs: [
        './views/account/loginSpec.js'
        ,'./views/inStudents/inStudentsSpec.js'
    ]


//Spec File
describe('Testing Students Page', function () 

    var inStudents: InStudents = require('./inStudents.js');
    var defs: Defs = require('../defs.js');
    it('should check cell 2 2 ', function () 
        inStudents.createNewInStudent()
    );
);

//Testing file

class InStudents 

        createNewInStudent() 
            element(by.css('[ng-click="vm.openNewPage()"]'));
            browser.sleep(1000)
            expect(element(by.css('[ng-click="vm.submitButtonOfThatPage()"]')).isPresent()).toBe(true);
        
    
module.exports = new InStudents();

【问题讨论】:

帮自己一个忙,并为您的按钮分配一个语义 ID,而不是通过您在 ng-click 中放置的任何内容来定位它们。没有代码,我们无能为力。 做了什么。我仍然不知道按钮的作用。您刚刚更改了函数的名称。 【参考方案1】:

不要使用browser.sleep() 延迟,而是使用browser.wait() 和wait for the element to become present 明确表示:

var submitButton = element(by.css('[ng-click="vm.submitButtonOfThatPage()"]'));
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(submitButton), 5000);

【讨论】:

非常感谢@alecxe。似乎browser.wait() 已被proctrator 2.1.0 弃用,对吗? @asdf_enel_hak 很高兴为您提供帮助。不,browser.wait 来自webdriverjs,它肯定会留在那里(github.com/angular/protractor/blob/master/CHANGELOG.md)。谢谢。 我说错了。我的意思是:expect(myelement).isPresent()).toBe(true) 已弃用。而是使用browser.wait(EC.presenceOf(myElement), 5000); @asdf_enel_hak hm,我认为这两个选项都是有效的,它们是不同的,但就语法而言,它们是有效的。 browser.wait() 基本上会检查条件,直到满足或超时..

以上是关于waitForAngular 和 "then" 都不能按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

在表格中,th scope="row"和th scope="col"中的scope属性的用法及意义

量角器 - 等待异步完成

easyui表格th和td对不齐怎么办

jQuery 实现table表的th标签的显示和隐藏?

为啥 <td th:each="i : $#numbers.sequence(0, table_width)" th:text="$rows[$i]"&g

Thymeleaf + jQuery ,如何正确添加 th:field="*value"