如何解决如何通过多个文本匹配单击一个元素?
我有一些具有不同字段的卡片。文字看起来像这样。
梗
年龄2
雷克斯名字
位置科罗拉多
我需要用一张文本匹配一张卡片。所以element(by.cssContainingText('#age','Age 2'))
并不是很有帮助,因为我还需要'#location'来匹配'Colorado'。
我尝试的是链接element.all(by.cssContainingText('#card','Age')).element.all(by.cssContainingText('#location','Colorado'))
,但似乎不起作用,而且非常混乱。
最终目标是单击匹配的第一张卡。
我还尝试创建一个与文本匹配的函数。但是,如果第一次单击后有多个匹配项,它还会尝试单击下一个匹配项,我会收到陈旧的元素错误。
public clickDogCardByAgeAndLocation(age: string,location: string) {
common.waitForElement($('dog-card'));
$$('dog-card').each(element => {
element.getText().then(text => {
if (text.includes(age) && text.includes(location)) {
console.log('CARD SUCCESS');
element.click();
}
});
});
}
我敢肯定有一种更优雅的方法可以做到这一点。 谢谢!
解决方法
如果所有文本都在一个元素上,则可以使用xpath查找多个条件,如下所示:
//p[contains(text(),'I am')][contains(text(),'more elegant')][contains(text(),'do this')]
如果您的文本跨越多个子元素,则可以通过如下包装该标识符来选择父卡:
//div[p[contains(text(),'do this')]]
这是div
,其中包含p
,其中包含这些文本条件。
还有xpath修饰符,可以更容易地阅读诸如and和or:
//p[contains(text(),'I am') and contains(text(),'more elegant')]
您可以在此页面上尝试所有这些方法:-)
如果您有一个更复杂的对象,请共享您的html,我可以为您提供更多定制服务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。