背景:检查元素是否可点击(我希望它不可点击,我想断言这一点)而无需等待。 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?
在这种情况下不起作用,因为该元素可见,但在透明的灰色覆盖层后面。我需要确认它不可点击。
答案 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)