惊讶的是,我实际上还没有遇到过,但是我有一个简单的按钮,在选择下拉菜单之前,该按钮一直处于禁用状态。有时,页面速度不够快,无法在选择上一个下拉菜单后“启用”要单击的按钮,从而导致页面失败。
我可以花一两秒钟来“睡眠”并解决此问题,但这似乎是一种懒惰/较差的方法。
在水豚(或纯硒)中是否有一种方法可以让它等到实际启用按钮后才能使用?我想为此按钮添加页面模型方法(因为我试图在实际测试规范中避免使用特定于API的方法/ selenium / etc(尽管我可以,如果需要的话)。
FWIW这是专门针对Ruby的capybara框架,但是纯硒也可以。
答案 0 :(得分:1)
在Python中,您可以执行以下操作:
def wait_until_clickable(driver, xpath, timeout = 1):
while timeout > 0:
try:
element = driver.find_element_by_xpath(xpath)
element.click()
return element
except:
time.sleep(0.1)
timeout = timeout - 0.1
return False
答案 1 :(得分:1)
假设您所指的按钮实际上是一个按钮(
click_button('Something')
或
find_button('button_id').click
或
find(:button, 'button_value').click
如果任何查找程序或操作方法对特定元素的等待时间不够长,则始终可以通过传递:wait选项来增加特定查找程序/操作的最长等待时间
find(:button, 'Something', wait: 10).click
如果您不使用选择器类型(如果不使用,为什么不使用),而只是使用原始CSS来定位元素,则可以将:enabled
伪类与现有CSS一起使用,例如< / p>
find('#my_button:enabled', wait: 10).click
如果您要调用按钮的元素实际上不是按钮,而是样式看起来像按钮的某种其他类型的元素(等),那么您需要确切说明如何禁用“按钮”。