首页 > 解决方案 > Capybara 等到按钮启用?

问题描述

很惊讶我实际上没有遇到过这个问题,但是我有一个简单的按钮,在选择下拉菜单之前它会被禁用。有时页面速度不够快,无法在选择上一个下拉菜单后“启用”按钮被点击,导致它失败。

我可以投入一两秒钟的“睡眠”并解决这个问题,但这似乎是一种懒惰/糟糕的方法。

capybara(或纯硒)有没有办法让它等到按钮实际启用?我想抛出这是此按钮的页面模型方法(因为我试图在实际测试规范中避免 API 特定方法/硒/等...(尽管如果需要,我可以)。

FWIW 这是专门针对 Ruby 的 capybara 框架的,但纯硒也可以。

标签: rubyseleniumcapybara

解决方案


假设您所指的按钮实际上是一个按钮(<button> 元素,或 <input> 类型为 submit、reset、image 或 button 的元素),那么 Capybaras :button 选择器将(默认情况下)等待它为非-禁用。

click_button('Something')

或者

find_button('button_id').click

或者

find(:button, 'button_value').click

如果任何 finder 或 action 方法没有为特定元素等待足够长的时间,您始终可以通过传递 :wait 选项来增加特定 finder/action 的最大等待时间

find(:button, 'Something', wait: 10).click

如果您不使用选择器类型(如果不使用,为什么不使用),而只是使用原始 CSS 来定位元素,那么您可以使用:enabled伪类以及现有的 CSS 和类似的东西

find('#my_button:enabled', wait: 10).click

如果您调用按钮的元素实际上不是一个按钮,而是一些其他类型的元素(<a> 等),其样式看起来像一个按钮,那么您需要准确解释您如何禁用“按钮”。


推荐阅读