【发布时间】:2026-02-12 04:45:01
【问题描述】:
我有一个问题,如果我使用 .isPresent(); 可以让我的 xpath 在测试脚本上显示零错误;验证元素是否在页面上,但如果我使用“click”命令代替,我会收到错误指示无法找到 xpath。 xpath 在这里起作用:
element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i')).isPresent();
这里是xpath
element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i')).click();
结果
失败:使用定位器找不到元素:By(xpath, //*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-检测器/settings-section[8]/div[1]/a/i)
像 element(by.xpath('.//*[.="TextIWant"]')).isPresent(); 与 isPresent() 一样,搜索文本的相对 xpath(这可能更安全,因为未来的更改会破坏它),但在 .click() 时失败。
我尝试了不同的 xpath 工具(在 Chrome 和 Firefox 中加上一个附加组件)来检查 xpath,但结果是一样的。为什么点击它时可以找到元素但错误?该脚本在到达这一点之前找到并单击其他一些元素。我需要做什么才能让它点击它显然可以找到的元素?
这是我复制的元素:
div class="header"
a href="" class="toggle-bt ng-binding" ng-click="view.showContent = !view.showContent"
i class="fa fa-angle-right" ng-class="view.showContent ? 'fa-angle-down' : 'fa-angle-right'" style=""></i>
TextIWant
</a>
<div class="description ng-binding">
Settings for the TextIWant
</div>
</div>
【问题讨论】:
-
提供相关链接或HTML代码
-
您是否尝试添加等待元素可点击?如果您使用的 XPath 在当前和单击情况下实际上是相同的,那么您不应该收到此错误,除非它是时间问题。到页面的链接会有很大帮助。
-
当您说 isPresent “有效”时,这意味着它不会抛出错误,或者如果您期望它是真实的或真实的,它是?
-
我添加了元素的代码sn-p。通过 isPresent 工作,我的意思是它不会引发错误。我确实尝试在 isPresent 和 .click(); 之间等待更长的时间;尝试,但我仍然收到错误,表明单击命令未找到它。
-
我不知道这个问题,但对我来说有时它有助于使用:
browser.actions().mouseMove(myElement).perform(); browser.actions().click(myElement).perform();例如,单击svg绘制的元素对我不起作用。
标签: angular selenium-webdriver xpath protractor