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