【问题标题】:Robot Framework: Issue in checking for a text after span机器人框架:跨度后检查文本的问题
【发布时间】:2019-03-16 07:21:45
【问题描述】:

在Robot Framework中,我正在尝试检查源代码中是否存在“XXX”,如下所示:

<button class='btn-aaa'>
<span class='bbb'>
XXX
</button>

我尝试了以下代码,但都失败了:

Page Should Contain Element | //button/span/following-sibling::text()="XXX" 
---> Valid xpath but encountering error in Robot Framework with error message "InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression //button/span/following-sibling::text()="XXX" because of the following error: TypeError: Failed to execute 'evaluate' on 'Document': The result is not a node set, and therefore cannot be converted to the desired type." 

Page Should Contain Element | //button/span[@class='bbb']/following-sibling::contains(text(),"XXX")
---> Invalid xpath

Page Should Contain Element | //button/span[@class='bbb']/following-sibling::[contains(text(),"XXX")]
---> Invalid xpath

谁能建议在 Robot Framework 中使用正确的 xpath 检查“XXX”的正确方法?

以下是所用工具的信息:

  • 机器人框架版本 3.0.4
  • Selenium 版本 3.14.1
  • Selenium2Library 版本 3.0.0
  • Python 3.6.6

已编辑:

我非常感谢你们所有人都在努力提供帮助。非常感谢。 我会尽力提供尽可能多的信息,以便您也可以帮助我。

我试过了:

//button[normalize-space()='View Data']

不幸的是,它什么也没找到。

还有其他按钮,但只有一个带有“查看数据”文本。

这里有更详细的代码。不知道与前面提到的简化版相比是否有帮助:

<button class="btn btn-submit float-left" type="button" onclick="return doActionParam('https://www.blabla.com/blabla',{op:'viewBla',blaId:'wxyz', activeTab:getActiveTabName()})">
<!--groupParent.-->
<span class="bongobongo"></span>
View Data
<button>

希望这次信息对您有所帮助。再次感谢。

附加信息:

浏览器:Mozilla Firefox 62.0.3(64 位)

【问题讨论】:

  • 您是否有理由专门使用 xpath 而不是 css 选择器?
  • 这只是为了标准化,坚持使用 xpath,因为整个测试自动化脚本都在使用 xpath。如果有更好的方法,请随时提出建议。
  • 好吧,我建议使用 css 路径而不是 xpath。 xpath 是明确的,如果项目正在开发中,则必须不断更改。 css 路径不那么脆弱。
  • 谢谢,KeithMc18。我会试试看。

标签: xpath robotframework


【解决方案1】:

你能试试这个 xpath://button[normalize-space()='XXX']

你的测试应该是:Page Should Contain Element //button[normalize-space()='XXX']

【讨论】:

  • 感谢您提出的解决方案。我尝试过,但未能检测到该元素。我用更详细的代码和信息编辑了我的问题。
【解决方案2】:

问题是您的页面不包含带有文本“XXX”的跨度。它实际上拥有的是“换行符,XXX,换行符”。此外,跨度和按钮都没有兄弟姐妹(因此没有后续兄弟姐妹)。

您可以使用normalize-space 忽略文本周围的空格。例如,当我创建一个与您的问题相同的 HTML 文档时,以下内容对我有用:

Page should contain element  //button[normalize-space()='XXX']

这应该适用于代码中的更新示例,只需将XXX 替换为View Data

Page should contain element  //button[normalize-space()='View Data']

【讨论】:

  • 感谢您的解释。我是菜鸟。不幸的是,建议的解决方案不起作用,因为无法检测到 xpath。我已经用更详细的信息和代码编辑了我的原始问题。我希望它有助于更​​好地回答我的问题。
  • @user1172930:我的代码也适用于您的新示例。肯定还有更多你没有告诉我们的。如果您使用 exactly 您发布的 html 代码并在我的答案中使用 exactly xpath(将 XXX 替换为 View Data),它应该可以工作。没有理由不这样做。我已经在 linux 和 osx 上使用 chrome 和 firefox 进行了测试。
  • 你完全正确,布莱恩。按理说它应该工作。我使用包含上述代码的 html 创建了一个简单的页面。建议的 xpath 确实有效。现在我也在思考为什么它在实际代码上不起作用(我不是开发人员)。实际代码很乱。不知道什么是阻塞因素。通过像这样使用荒谬的 xpath 确实有效:form/div[2]/div[4]/div[1]/div[2]/div[3]/div[3]/button
  • 我试过了,可以找到按钮://form/div[2]/div[4]/div[1]/div[2]/div[3]/div[3 ]/按钮。但是,当我尝试这个时它失败了: //form/div[2]/div[4]/div[1]/div[2]/div[3]/div[3]/button[normalize-space() ='查看数据']。这可能是什么问题?
  • 提供的解决方案确实有效,但它在我正在处理的网页上不起作用。我决定不浪费时间了。所以我使用 //form/div[2]/div[4]/div[1]/div[2]/div[3]/div[3]/button 代替。
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 2017-09-13
  • 2021-01-17
  • 2020-10-22
  • 1970-01-01
  • 2017-04-18
  • 2018-07-20
  • 2020-03-20
相关资源
最近更新 更多