水豚找不到下拉列表
Capybara cannot find dropdown list
我正在使用 Capybara + Ruby 进行一些自动化方面的工作。
页面上有一个下拉列表,我需要单击它和 select 选项。问题是 - 它的 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的屏幕截图供您参考:
Capybara 的 select
和 select_option
方法旨在与 HTML <select>
和 <option>
元素一起使用,尽管 select_option
正在做您期望的是因为您使用的驱动程序在用于非 <option>
的元素时仅退化为 click
。在这种情况下,您正在处理一个 JS 小部件下拉列表,因此您只需要使用 find
方法和 click
.
对于显示的实际选择,您没有显示 HTML 的结构,因此我无法为您提供确切的说明,但对于 'Select an application type' 的初始点击以下任何一项都将是比您所拥有的更好的选择
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
对于您之后想要 select 的选项,假设小部件继续使用 aria 角色并使用角色 'option',您可以执行类似
的操作
find('div[role="option"]', text: 'Applications').click
如果我对用于该选项的角色的猜测有误,请进行相应更新
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
我正在使用 Capybara + Ruby 进行一些自动化方面的工作。 页面上有一个下拉列表,我需要单击它和 select 选项。问题是 - 它的 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的屏幕截图供您参考:
Capybara 的 select
和 select_option
方法旨在与 HTML <select>
和 <option>
元素一起使用,尽管 select_option
正在做您期望的是因为您使用的驱动程序在用于非 <option>
的元素时仅退化为 click
。在这种情况下,您正在处理一个 JS 小部件下拉列表,因此您只需要使用 find
方法和 click
.
对于显示的实际选择,您没有显示 HTML 的结构,因此我无法为您提供确切的说明,但对于 'Select an application type' 的初始点击以下任何一项都将是比您所拥有的更好的选择
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
对于您之后想要 select 的选项,假设小部件继续使用 aria 角色并使用角色 'option',您可以执行类似
的操作find('div[role="option"]', text: 'Applications').click
如果我对用于该选项的角色的猜测有误,请进行相应更新
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