RobotFramework:未找到带有定位器的链接/列表

Posted

技术标签:

【中文标题】RobotFramework:未找到带有定位器的链接/列表【英文标题】:RobotFramework: Link/List with locator not found 【发布时间】:2021-01-22 20:04:40 【问题描述】:

我正在使用 Selenium 库研究 Robot Framework,但我不知道如何从下一个下拉列表中删除“kw”元素:

我尝试使用 xpath:

*** Settings ***
Library  SeleniumLibrary

*** Test Cases ***
MyTest
  Create Webdriver  Chrome  executable_path=chromedriver.exe
  Open Browser  http://127.0.0.1:85/  Chrome
  Sleep  10
  Click Link  xpath=//body/div[@id='react-entry-point']/div[@id='_dash-global-error-container']/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]

但它不起作用。我得到:

Link with locator 'xpath=//body/div[@id='react-entry-point']/div[@id='_dash-global-error-container']/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]' not found.

我还尝试通过 List by Value 而不是 Click Link 访问此元素:

  Unselect From List by Value  xpath=//body/div[@id='react-entry-point']/div[@id='_dash-global-error-container']/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]

但我收到一个错误:

List with locator 'xpath=//body/div[@id='react-entry-point']/div[@id='_dash-global-error-container']/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/span[1]' not found.

这是下拉菜单的 html 代码:

  <div style="display: inline-block; height: 20px; width: 300px; margin-left: 25px;" xpath="1"><div id="Type_id" class="dash-dropdown"><div class="Select has-value is-clearable is-searchable Select--multi"><div class="Select-control"><div class="Select-multi-value-wrapper" id="react-select-2--value"><div class="Select-value"><span class="Select-value-icon" aria-hidden="true">×</span><span class="Select-value-label" role="option" aria-selected="true" id="react-select-2--value-0">kw<span class="Select-aria-only">&nbsp;</span></span></div><div class="Select-value"><span class="Select-value-icon" aria-hidden="true">×</span><span class="Select-value-label" role="option" aria-selected="true" id="react-select-2--value-1">teardown<span class="Select-aria-only">&nbsp;</span></span></div><div class="Select-value"><span class="Select-value-icon" aria-hidden="true">×</span><span class="Select-value-label" role="option" aria-selected="true" id="react-select-2--value-2">setup<span class="Select-aria-only">&nbsp;</span></span></div><div class="Select-input" style="display: inline-block;"><input id="Type_id" aria-activedescendant="react-select-2--value" aria-expanded="false" aria-haspopup="false" aria-owns="" role="combobox" value="" style="box-sizing: content-box; width: 5px;"><div style="position: absolute; top: 0px; left: 0px; visibility: hidden; height: 0px; overflow: scroll; white-space: pre; font-size: 15px; font-family: &quot;Open Sans&quot;, HelveticaNeue, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-weight: 400; font-style: normal; letter-spacing: normal; text-transform: none;"></div></div></div><span aria-label="Clear all" class="Select-clear-zone" title="Clear all"><span class="Select-clear">×</span></span><span class="Select-arrow-zone"><span class="Select-arrow"></span></span></div></div></div></div>

这里是完整 HTML 代码的链接: https://jsfiddle.net/illuminato/u2j6wbh/

【问题讨论】:

【参考方案1】:

使用以下 xpath。

//span[text()='kw']

//span[contains(.,'kw')]

//div[@class='Select-value']//span[contains(.,'kw')]

【讨论】:

谢谢。但这对我不起作用。我得到Link with locator 'xpath://span[text()='kw']' not found。 @illuminates :您是否也尝试过其他两个选项? 如果其他两个选项你得到相同的错误那么元素必须在 iframe 内,如果是这样,你需要切换到 iframe 才能访问该元素。 我也尝试了其他选项。我不认为 HTML 代码有 iframe。我已经更新了带有完整 HTML 代码链接的帖子。 @illuminates :这真的很奇怪!所有三个xpaths 都可以正常使用您共享的 html。不知道为什么它不能在你的最后工作。【参考方案2】:

你可以在 kw span 旁边找到 X span 的定位器:

//span[contains(text(), 'kw')]//preceding::span

【讨论】:

P.S:我无法从 UI 中点击那个按钮,而且工具有限,所以如果你想做严肃的事情,我的建议是改变它 谢谢,但我仍然遇到同样的错误:Link with locator 'xpath://span[contains(text(), 'kw')]//preceding::span' not found. 是的,因为工具箱在 iframe 内,您需要在执行操作之前切换到框架 我认为 HTML 代码没有 iframe。但解决方案是//span[text()='kw']/../*[@class="Select-value-icon"]【参考方案3】:

终于得到了solution:

Click Element   //span[text()='kw']/../*[@class="Select-value-icon"]

【讨论】:

以上是关于RobotFramework:未找到带有定位器的链接/列表的主要内容,如果未能解决你的问题,请参考以下文章

机器人框架:没有 id 或名称的按钮的定位器

Robotframework + Appium 之常用元素定位方法

Robotframework:Selenium2Lib:等到(...)关键字

RobotFramework 定位具有相同类的元素

Java数据结构带有虚拟头节点的链表

Java数据结构带有虚拟头节点的链表