我正在使用XPath编写一些e2e(由于各种原因,我无法在项目中设置可爱的ID)。但是,当通过XPath查找父元素并随后尝试在其中找到子元素时,量角器将忽略父元素,并尝试在整个文档中找到它。
(在这种情况下,各个复选框使用相同的名称,但它们包含在可以充当父级的不同卡中。)
我已经分别测试了XPath表达式,并且找到了我想要的元素,我还加入了XPath表达式,它们可以完美地工作,我不明白的是为什么在Protractor中运行它时无法正常工作
此函数查找父元素
findEpCard(label:string) {
//return element(by.xpath('//ep-card//div[contains(@class, "ep-card-header")]//h4[text() = "'+label+'"]/../..'));
return element(by.xpath('//ep-card[.//h4[text() = "'+label+'"]]'));
}
此功能是通过搜索父卡来找到复选框的功能
findCheckbox(parentCard: string, label: string) {
let card = this.findEpCard(parentCard)
return card.element(by.xpath('//ep-check-box[.//span[text()="'+label+'"]]'));
}
但是当用
调用时csKeyField = this.findCheckbox('Control Settings','Key Field');
它将在DOM中找到所有复选框。
通过加入2个xpath进行搜索非常有效,但是我试图避免这种情况:
return element(by.xpath('//ep-card[.//h4[text() = "'+parentCard+'"]]//ep-check-box[.//span[text()="'+label+'"]]'));
谢谢!
答案 0 :(得分:1)
您错过了以下xpath的标题.
,这里的.
表示搜索元素从作为父节点的当前节点开始。在这里没有.
的情况下,您的xpath告诉浏览器从HTML的开头开始搜索元素。
card.element(by.xpath('.//ep-check-box[.//span[text()="'+label+'"]]'));