【问题标题】:Finding locator by text?通过文本查找定位器?
【发布时间】:2017-09-26 09:05:45
【问题描述】:

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

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

【问题讨论】:

  • 为您的“Hello”添加一个 ID?
  • 这个问题太模糊了。有数百种方法可以让我们拥有带有“Hello”标签的页面,以及访问该标签的几种方法。你将不得不更具体。您是否研究并尝试过使用 xpath 或 css 路径?

标签: python robotframework selenium2library


【解决方案1】:

我已经看到 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 上供其他人查看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 2015-11-08
    • 2011-06-07
    • 1970-01-01
    • 2013-10-14
    • 2015-12-19
    • 2018-12-14
    相关资源
    最近更新 更多