通过文本查找定位器?

时间:2017-09-26 09:05:45

标签: python robotframework selenium2library

我想知道是否有办法在机器人框架中获取任何文本的定位器?我正在使用Selenium2Library的Robot Framework。

场景示例:假设我有消息" Hello"在我的页面上,当新消息出现时,它的位置会不断变化。我想点击这个"你好"单词显示完整的消息。我怎样才能做到这一点。请帮忙。

1 个答案:

答案 0 :(得分:0)

我看到Angular网页的位置发生了很大变化,所以我理解你的意思。每次加载页面时都可以重新生成ID,并且可能会根据您单击元素的顺序而更改。更糟糕的是,它们也可以影响基于dom和xpath的定位器。对您的问题的简短回答是否定的,它不存在于标准Selenium,Selenium2,ExtendedSelenium2或任何其他标准库中。

我目前最先进的Click Element by Text自定义关键字可以解决您问题的中等答案。它根据您的输入生成一个xpath,如果可以通过简单的文本搜索找到它而没有额外的参数,它就会这样做。它有时很暴躁,可能需要参数注入才能工作,但总的来说它工作得非常好,并且在远程可能的xpath时很容易使用。

Click Element by Text
    #   EXAMPLE USAGE
    #   Click Element by Text   "text on the element"   id="midlevellocationoftext"     button
    #   NOTE:   Does not account for extra spaces at the beginning or end, text must be exact
    #   NOTE:   Allows for injections on purpose to allow user to be more exact with their location
    [Arguments]     ${text}     ${location}=*   ${elementtype}=*
    Click Element   xpath=//*[@${location}]//${elementtype}[text()=${text}]

答案很长,我正在做更好的事情。这就是我目前所知道的。执行此操作的元素确实存在于虚空中。 JavaScript可以将网页转换为元素列表。我可以在这些元素上调用.innerHTML来获取他们的文本。我还没有弄清楚细节,但老实说我认为这是可能的,当我弄明白时,代码将出现在Code Review上供其他人查看。