通过Xpath在另一个元素中查找元素

时间:2019-05-03 19:36:03

标签: javascript protractor webdriver

我正在使用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+'"]]'));

谢谢!

1 个答案:

答案 0 :(得分:1)

您错过了以下xpath的标题.,这里的.表示搜索元素从作为父节点的当前节点开始。在这里没有.的情况下,您的xpath告诉浏览器从HTML的开头开始搜索元素。

card.element(by.xpath('.//ep-check-box[.//span[text()="'+label+'"]]'));