如果元素不可点击,为什么find(element).click使用max_wait_time而不是指定的wait:0?

时间:2019-05-23 10:00:28

标签: ruby rspec capybara

背景:检查元素是否可点击(我希望它不可点击,我想断言这一点)而无需等待。 find()。click使用Capybara.max_wait_time,然后返回异常:

Selenium::WebDriver::Error::UnknownError Exception: unknown error: Element <input type="text" class="form-control floatingInput" name="firstname" placeholder="Enter your first name" aria-label="First Name" value="Lynn"> is not clickable at point (415, 301). Other element would receive the click: <div class="Checkout__overlay__1cqyM"></div>

而不是立即返回异常。

确切的代码行在我认为不应该的时候等待。如果该元素不可点击(如预期那样被叠加层隐藏),则等待max_wait_time(例如20秒)。很明显,我提供了等待:0

find(checkout.ship_first_name.path, wait: 0).click

似乎是异常的超时时间不同,或者#click使用了自己的超时时间,但是#click并未接受AFAIK参数。

注释1

find(element,wait:0)本身可以正常工作,因为我在if / else块中使用它,并且没有像指定的那样不必要的等待。

注释2

#visible?在这种情况下不起作用,因为该元素可见,但在透明的灰色覆盖层后面。我需要确认它不可点击。

1 个答案:

答案 0 :(得分:0)

click确实有一些选择(单击,单击偏移量和等待/重试时间时,按住修改键),所以要做的就是

find(checkout.ship_first_name.path, wait: 0).click(wait: 0)

using_wait_time(0) do # may need to be page.using_wait_time(0) depending on your setup
  find(checkout.ship_first_name.path).click
end

但是从Capybara 3.20+开始(假设您使用的是Chrome或Firefox),您也可以这样做

find(checkout.ship_first_name.path).obscured?

找出它是否在页面上但未被单击。如果您期望将其遮盖住,则可以

expect(page).to have_css(checkout.ship_first_name.path, obscured: true)