如何使用Capybara选择Google地址自动补全下拉选项?
解决Capybara点击Google地址自动补全选项的问题
你的问题出在没找对Google自动补全生成的下拉选项的DOM结构,之前用的方法都不适用:
select方法只针对原生HTML的<select>标签,而Google的下拉是动态生成的div容器,完全不匹配。find('#autocomplete', text:...)是在输入框元素里找文本,但下拉选项根本不在这个input里,自然找不到。
正确的操作步骤
Google地址自动补全的下拉选项,会被渲染在一个class为pac-container的容器中,每个选项对应pac-item类的元素。你可以按以下代码操作:
# 填充地址到输入框 fill_in 'Location', with: "Toronto ON Canada" # 等待下拉容器加载完成(Ajax请求需要时间,设置5秒超时足够) pac_container = find('.pac-container', wait: 5) # 找到包含目标地址的选项并点击,用正则模糊匹配更稳妥(避免选项带额外细节) pac_container.find('.pac-item', text: /Toronto ON Canada/).click
解决调试时下拉消失的问题
你在binding.pry调试时切换窗口下拉就消失,是因为Google的自动补全会在页面失去焦点时隐藏。可以在pry里执行这段JS强制显示下拉容器,就能用Chrome工具检查元素了:
page.driver.browser.execute_script("document.querySelector('.pac-container').style.display = 'block'")
额外注意点
如果直接填充输入框不选下拉会触发错误,说明前端做了校验,必须通过点击下拉选项来触发地址的合法校验逻辑,所以一定要确保点击的是pac-item元素,而不是只填输入框。
内容的提问来源于stack exchange,提问作者daveasdf
相关产品推荐
相关产品推荐

