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

标签 javascript protractor webdriver

我正在使用 XPath 编写一些 e2e(由于各种原因,我无法在我的项目上设置甜蜜的 ID)。然而,当通过 XPath 查找父元素并随后尝试在其中查找子元素时,Protractor 会忽略父元素并尝试在整个文档中查找它。

(在这种情况下,各个复选框共享相同的名称,但它们包含在可以充当父项的不同卡片中。)

我已经单独测试了 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+'"]]'));

谢谢!

最佳答案

你错过了下面xpath的标题中的.,这里的.表示从当前节点(即父节点)开始搜索元素。此处如果没有 .,您的 xpath 会告诉浏览器从 HTML 开头开始搜索元素。

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

关于javascript - 通过Xpath在另一个元素中查找一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976117/

相关文章:

javascript - jquery加载页面问题

javascript - 等待带有定位器的元素时超时

java - 无法定位元素 : error when executing code through POM, 通过单个 main() 程序执行时,相同的定位器工作正常

javascript - 如何使用 javascript 以特定格式显示日期月份和年份并使用react?

javascript - D3 Zoom 无法读取未定义的属性 'transform'

javascript - 在 Protractor angularjs 上指定了无效或非法的选择器错误

angularjs - Protractor :WAITING规范完成 10000 毫秒后超时

python - 如何使用机器人框架,selenium 打开新窗口?

java - 如何使用 webdriver 在鼠标悬停时保持下拉菜单打开

javascript - 为什么使用 $routeProvider 会提前触发路由?