在Selenium铬驱动程序 python 中找不到带有 text() 的按钮



我无法单击按钮,但我尝试的每种方法都失败了。以下是在 chrome 中单击"检查"的结果:

<button class="rg-run-report-button md-raised md-primary md-ink-ripple md-button" type="submit" ng-transclude="" ng-click="reportCtrl.generateReport()" ng-disabled="!(reportCtrl.isGenerateButtonEnabled())">
        RUN REPORT
      <div class="md-ripple-container" style=""></div></button>

我将摆脱这个并构建一个像这样的 Xpath:

driver.find_element_by_xpath("//button[contains(text(), 'RUN REPORT')]").click()

文本"运行报告"周围有很多尴尬的空格。我不确定该怎么做,因为我试图通过其属性找到按钮。

尝试以下定位符之一 -以下定位器将删除文本周围的空格并仅查找文本

//button[normalize-space(text()='RUN REPORT')]

或者从 HTML 结构来看,您的应用程序对于使用 Angular 使用ng标签开发的应用程序来说似乎是非常有效的

//button[@ng-click="reportCtrl.generateReport()"]

感谢@Dev:

查找我需要单击的元素的问题不是来自不正确的 Xpath 定位器,而是没有考虑切换 iframe。我正在查看的源没有直接包含该元素,但确实有一个 iframe(总共两个(包含该元素。

当我单击按钮上的"检查元素"时,它没有直接向我显示组件。因为这些组件嵌套在 iframe 中。

我做了:

driver.switch_to.frame('name of iframe')

然后

driver.find_element_by_xpath("//button[@ng-click='reportCtrl.generateReport()']")

相关内容

  • 没有找到相关文章

最新更新