【问题标题】:Convert Robot Framework xPath to Selenium Python equivalent.将 Robot Framework xPath 转换为 Selenium Python 等效项。
【发布时间】:2018-03-27 12:37:09
【问题描述】:

我正在尝试将机器人中的 xpath 转换为 python 代码。我希望将 Robot 中的以下 xpath 转换为 python 代码

这适用于机器人:

xpath=(//th[@class="picker-switch"])[2]

我在python中试过

self._driver.find_element_by_xpath("//th[@class='picker-switch'][2]")

导致以下错误:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//th[@class='datepicker-switch'][2]"}

self._driver.find_element_by_xpath("//th[@class='picker-switch']")[2]

导致:

'WebElement' object does not support indexing

【问题讨论】:

  • “不工作”是一个相当广泛的领域。你能提供给我们错误信息吗?
  • 我已经添加了错误。

标签: python-2.7 selenium-webdriver robotframework


【解决方案1】:

当我用方括号 (...) 括住 xpath 语句时它开始工作:

self._driver.find_element_by_xpath("(//th[@class='picker-switch'])[2]").click()

【讨论】:

    【解决方案2】:

    它失败了,因为您在第一次 python 尝试中放入的 xpath 与 RF 中的 xpath 不同;)。

    在原始 xpath 中,表达式用方括号 (expression) 括起来,然后是索引。其中读取 - 查找与表达式匹配的所有元素,并返回第二个。

    没有括号 - 找到所有 th 与该类,它们是他们父母元素的第二个孩子 - 完全不同:)

    为了记录,更正的第二次python尝试应该是

    self._driver.find_elements_by_xpath("//th[@class='picker-switch']")[1]
    

    find_elements_by_xpath 将返回与表达式匹配的所有元素作为列表,[1] 将返回该列表中的第二个元素 - python 的列表是从零开始的(从索引 0 开始),而 xpath 的 - 从一开始。

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2018-03-18
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多