如何验证具有相同定位符的页面上的多个错误消息?

时间:2019-03-26 10:56:33

标签: angularjs selenium-webdriver protractor automated-tests

对于用angularjs开发的应用程序,我正在验证页面上的验证消息。但是所有消息都具有相同的标识符。那么我们如何验证页面上的每条消息。我正在用硒,用C#量角器。

mapStateToProps

4 个答案:

答案 0 :(得分:1)

找到这些元素的最可靠方法是验证标签的文本内容,并使用某种形式的xpath axes来做到这一点。轴使您可以更轻松地找到相对于另一个元素的元素。

使用带有xpath的量角器,您可以使用:

element(by.xpath('//input[@class="form-control ng-untouched ng-pristine ng-invalid"]/following::div[text()="First Name is required"]'));

element(by.xpath('//input[@class="form-control ng-untouched ng-pristine ng-invalid"]/parent::div//div[text()="First Name is required"]'));

使用不使用轴的另一种方法进行更新:

element(by.xpath('//div[@style="color: red;font-weight: bold"]/div[text()="First Name is required"]'));

答案 1 :(得分:0)

使用相同的标识符查询时,它将返回一个数组,而不是唯一元素(一个对象)。然后,您可以通过说myArray [0],myArray [1]等选择一个元素,并验证您的消息。

答案 2 :(得分:0)

根据您的情况,唯一可行的解​​决方案是:

const firstNameError = element(by.cssContainingText('div', 'First Name is required'));
const lastNameError = element(by.cssContainingText('div', 'Last Name is required'));

// Here some code to act empty inputs

expect(firstNameError.isPresent()).toBeTruthy();
expect(lastNameError.isPresent()).toBeTruthy();

但是说实话,我不建议使用cssContainingText()。根据我的经验,我可以说它不够稳定,无法安全使用。

答案 3 :(得分:0)

我将获得与每个INPUT相关的验证消息。

//input[@formcontrolname='firstName']//following::div[1]/div
^ starts with the firstName INPUT
                                     ^ finds the first DIV that follows
                                                        ^ and finds the child DIV

这将找到包含消息“需要名字”的DIV,因此您可以断言这两个字符串相等。

第二条消息的类似定位符,唯一改变的是formcontrolname

//input[@formcontrolname='lastName']//following::div[1]/div