【发布时间】:2014-08-22 13:55:55
【问题描述】:
我正在尝试捕获文本(网页上不同面板的标题)并验证文本内容。我尝试使用 xpath 来捕获文本,但在 WebDriver 上令人惊讶的是,它失败了。相同的 xpath 似乎与 Selenium RC 完美配合。我想知道为什么 WebDriver 似乎无法识别 xpath 而 RC 可以!我试过的代码如下:
assertEquals("Identification requests", driver.findElement(By.xpath("//span[8]")).getText());
我也试过完整的xpath:
assertEquals("Identification requests", driver.findElement(By.xpath("html/body/div[2]/div[2]/div/div/div[1]/div/div[2]/div[2]/div/div/kibana-panel/div/div[1]/div[2]/div/span[8]")).getText());
我也尝试使用类变量,但这些变量似乎都没有返回任何结果。所有尝试都失败,并显示找不到元素的错误。
该部分的html代码如下所示:
<span class="panel-text panel-title ng-binding">Identification requests</span>
上面提到的span部分周围的HTML代码如下所示:
<div class="row-fluid panel-extra">
<div class="panel-extra-container">
<span class="extra row-button" ng-show="panel.editable != false && panel.removable != false">
<span class="extra row-button" ng-hide="panel.draggable == false">
<span class="row-button extra" ng-show="panel.editable != false">
<span class="row-button extra ng-scope" ng-show="task.show" ng-repeat="task in panelMeta.modals">
<span class="row-button extra ng-scope" ng-show="task.show" ng-repeat="task in panelMeta.modals">
<span class="row-button extra ng-scope" ng-show="task.show" ng-repeat="task in panelMeta.modals">
<span class="row-button extra" ng-show="panelMeta.loading == true" style="display: none;">
<span class="panel-text panel-title ng-binding">Identification requests</span>
</div>
</div>
</div>
我怀疑为什么适用于 RC 的 xpath 不适用于 WebDriver。以及我如何能够捕获文本?
【问题讨论】:
-
你能把
<span>周围的HTML贴出来吗? -
如果您的
span有可能是动态生成的,您可能需要尝试在调用assertEquals之前暂停您的代码几秒钟,看看这是否能解决问题。如果此暂停解决了问题,那么您希望使用显式等待来等待元素出现。 -
@sircapsalot 我已将 span 周围的 HTML 添加到上面的详细信息中。
-
@Louis:感谢您的建议。我确实添加了等待,但这并没有帮助。此外,在尝试调试时,我确实提供了足够的时间,然后再进行下一步捕获文本,但它总是失败并出现错误 noelementfound。 :( 另外,span 不是动态生成的。它们代表正在页面某个部分显示的图表的标题。
标签: selenium xpath webdriver selenium-rc capture