【问题标题】:How to write xpath based on element's text in Robot Framework?如何在 Robot Framework 中根据元素的文本编写 xpath?
【发布时间】:2017-06-07 22:44:22
【问题描述】:

我正在使用 Robot Framework 和 Selenium2Library

按钮有一个“保存”文本,它的 xpath 没有什么更独特的了,所以我试图根据元素的文本编写一个 xpath。 如何使用那段 html 编写基于元素文本的 xpath:

<button class="slds-button slds-button--brand cuf-publisherShareButton NARROW uiButton" type="button" data-aura-rendered-by="1571:2954;a" data-aura-class="uiButton">
<span class=" label bBody truncate" dir="ltr" data-aura-rendered-by="1574:2954;a">Save</span>
</button>

(这是在文档的中间)。

编辑: 似乎在下一个选项卡上几乎没有具有相同文本的元素(目前不可见)。 我应该如何使用此文本编写第二个元素的 xpath?我的意思是 index=1。

【问题讨论】:

    标签: selenium xpath selenium-chromedriver robotframework selenium2library


    【解决方案1】:
    Click Button    //button[.//text() = 'Save']
    

    是用“机器人框架”找到带有“保存”文本的按钮并单击它的方式。

    在@Tomalak 的帮助下修复

    【讨论】:

    • 不幸的是我得到了错误:元素定位器 'x​​path=//button[contains(text(), 'Save')]' 没有匹配任何元素。
    • 这不太可能奏效,因为text() 选择所有子文本节点,text() = 'Save' 将它们中的第一个 (!) 与字符串“Save”进行比较。 &lt;button&gt; 的第一个子文本是空的,并且它们实际上都不包含“保存”。
    • 更好,您可能想要表达的内容://button[.//text() = 'Save'],它将所有 &lt;button&gt; 元素的所有文本节点后代与字符串“Save”进行比较,如果 any 其中匹配。
    • 是的,我搞砸了 - 在这里留下答案作为未来的参考,就像在我自己​​的套件中工作一样。干杯@Tomalak
    • 这没有任何意义 :) 只要纠正它就可以了。使用 XPath 有很多方法可以表达相同的东西,那么为什么不提供一个显示替代方案的答案呢?
    【解决方案2】:

    尝试搜索包含所需文本的 span 的按钮

      WebElement saveButton = driver.findElement(By.xpath(".//button/span[text()='Save']")
    

    【讨论】:

    • 防御性更强:.//button/span[normalize-space()='Save']
    • 最近才发现 normalize-space(),它是一个方便的小功能。
    【解决方案3】:

    使用xpath 来查找文本为save 的按钮 -

     //button[contains(.,'Save')]
    

    【讨论】:

    • 这个给了我错误:ElementNotVisibleException
    • 不推荐,因为它可能导致意外误报。它将匹配 &lt;button&gt;Save Money!&lt;/button&gt;,这不是 OP 的意图。
    【解决方案4】:

    使用以下关键字,首先验证元素是否存在,然后点击定位器定位的元素

    Element should become visible    xpath=//button/span[text()='Save']
    Click Button     xpath=//button/span[text()='Save']
    

    还有一个内置关键字

    Click Element    xpath=//button/span[text()='Save']
    

    【讨论】:

      【解决方案5】:

      尝试使用下面的 xpath:

       xpath=//span[contains(text(),'Save')]
      

      【讨论】:

        【解决方案6】:

        试试这个 -

        //span[text()='Save']/ancestor-or-self::button
        

        【讨论】:

          猜你喜欢
          • 2016-09-30
          • 2021-03-27
          • 2021-03-27
          • 2016-07-19
          • 2017-02-21
          • 2017-02-24
          • 2020-11-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多