【问题标题】:Capybara cannot find dropdown listCapybara 找不到下拉列表
【发布时间】:2020-06-07 07:10:27
【问题描述】:

我正在使用 Capybara + Ruby 做一些自动化的事情。 页面上有一个下拉列表,我需要单击它并选择选项。问题是 - 它的 Google Play 控制台和所有样​​式和 ID 都是动态的,并且每次重新加载页面都会更改,因此您无法使用它们。此外,标签名称根本没有帮助。

您能帮我找到元素并选择正确的选项吗? 目前,它的工作方式如下: browser.find(:xpath, '/html/body/div[2]/div/div[2]/div/div[2]/div/div[3]/div/div[2]/div/div[1]/div/div/div/div/div[2]/div/div[2]/div[3]/section/div[4]/div/fieldset/label[1]/div[2]/div').click.find(:xpath, '/html/body/div[12]/div/div/div/div/div[1]').select_option
我需要找到一种不使用“xpath”的方法

抱歉截图。没有找到从浏览器复制代码的正确方法 所以,'Select an application type' 是这个下拉列表的占位符,它有两个选项:'Applications''Games'。我需要'Applications'

添加选项 HTML 的屏幕截图供您参考:

【问题讨论】:

  • 尝试puts page.body打印页面内容。

标签: ruby capybara


【解决方案1】:

Capybara 的 selectselect_option 方法旨在与 HTML <select><option> 元素一起使用,尽管 select_option 正在执行您所期望的操作,因为您正在使用的驱动程序正在演变为 click当用于不是<option> 的元素时。在这种情况下,您正在处理一个 JS 小部件下拉列表,因此您只需要使用 find 方法和 click

对于显示的实际选项,您没有显示 HTML 的结构,因此我无法为您提供确切的说明,但是对于初始单击“选择应用程序类型”,以下任何一项都会成为比你拥有的更好的选择

find(:label, 'Select an application type').click
find('div[role="button"]', text: 'Select an application type').click
find(:element, 'div', role: 'button', text: 'Select an application type').click

对于之后要选择的选项,假设小部件继续使用 aria 角色并使用“选项”角色,您可以执行类似的操作

find('div[role="option"]', text: 'Applications').click

如果我对用于该选项的角色的猜测是错误的,则相应地更新

【讨论】:

  • 是的,关于选项 HTML 结构,您实际上是正确的。抱歉,我刚刚为选项添加了 HTML。我使用find(:label) 方法成功找到了下拉字段,但对于选项本身并没有,它现在不起作用
【解决方案2】:
store_listing = browser.find_link(title: 'Store listing')
store_listing.click

application_type = browser.find(:element, 'div', role: 'button', text: 'Select an application type')
application_type.click
browser.find(:element, 'div', role: 'option', text: 'Applications').click

category_type = browser.find(:element, 'div', role: 'button', text: 'Select a category')
category_type.click
browser.find(:element, 'div', role: 'option', text: 'Shopping').click

browser.fill_in(type: "email", with: "contact@cityhive.net")
browser.click_on('Save draft', wait: 100)
sleep 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多