Capybara找不到下拉列表

问题描述 投票:1回答:1

我正在用Capybara+Ruby做一些自动化的事情.在页面上有一个下拉列表,我需要点击它并选择选项。问题是--它的Google Play Console和所有的样式和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'.

enter image description here

补充一张选项HTML的截图,供大家参考。

enter image description here

ruby capybara
1个回答
0
投票

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

对于此后您要选择的选项,假设小组件继续使用咏叹调角色并使用 "选项 "角色,您可以做如下操作

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

如果我对该选项所使用的角色的猜测是错误的,那么就相应地更新。


0
投票
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: "[email protected]")
browser.click_on('Save draft', wait: 100)
sleep 2
© www.soinside.com 2019 - 2024. All rights reserved.