How to make Capybara check for visibility after some JS has run?
I think that the find
statement here is the one with the implicit wait, so Capybara will wait until the element is on the page, but won't wait for it to become visible.
Here, you would want Capybara to wait for the visible element to appear, which should be achievable by specifying the visible
option:
expect(page).to have_selector('#blah', visible: true)
I haven't tried it, but the ignore_hidden_elements
configuration option might be useful here as well, if you wanted find
to always wait for visible elements.
This is another way to do it that works perfectly fine for me:
find(:css, "#some_element").should be_visible
Especially for more complex finds, such as
find(:css, "#comment_stream_list li[data-id='#{@id3}']").should_not be_visible
which would assert that an element has been hidden.
If you want to check that an element is on the page but is not visible, visible: false
won't work as you might expect. Had me stumped for a bit.
Here's how to do it:
# assert element is present, regardless of visibilitypage.should have_css('#some_element', :visible => false)# assert visible element is not presentpage.should have_no_css('#some_element', :visible => true)