def test_search_is_lazy_and_does_not_start_on_creation(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() non_existent_collection = session_browser.all('.not-existing').filtered_by( have.css_class('special') ) assert str(non_existent_collection)
def test_fails_on_timeout_when_waiting_parent_in_dom_then_visible_then_inner_in_dom_then_visible( session_browser, ): browser = session_browser.with_(timeout=0.25) page = GivenPage(browser.driver) page.opened_empty() page.load_body_with_timeout( ''' <p style="display:none"> <h2 id="second">Heading 2</h2> </p>''', 250, ).execute_script_with_timeout( 'document.getElementsByTagName("p")[0].style = "display:block";', 500 ) page.load_body_with_timeout( ''' <p> <a href="#second" style="display:none">go to Heading 2</a> <h2 id="second">Heading 2</h2> </p>''', 750, ).execute_script_with_timeout( 'document.getElementsByTagName("a")[0].style = "display:block";', 1000 ) with pytest.raises(TimeoutException): browser.element('p').element('a').click() assert "second" not in browser.driver.current_url
def test_search_is_updated_on_next_actual_action_like_questioning_count( session_browser): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.all('li').filtered_by( have.css_class('will-appear')) page.load_body(''' <ul>Hello to: <li>Anonymous</li> <li class='will-appear'>Bob</li> <li class='will-appear'>Kate</li> </ul>''') assert len(elements) == 2 page.load_body(''' <ul>Hello to: <li>Anonymous</li> <li class='will-appear'>Bob</li> <li class='will-appear'>Kate</li> <li class='will-appear'>Joe</li> </ul>''') assert len(elements) == 3
def test_search_does_not_start_on_creation(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() non_existent_element = session_browser.element('#not-existing-element-id') assert str(non_existent_element)
def test_search_does_not_start_on_creation(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() non_existent_element = session_browser.all('.will-appear')[1] assert str(non_existent_element)
def test_waits_first_for_parent_in_dom_then_inner_in_dom_then_visibility( session_browser, ): page = GivenPage(session_browser.driver) page.opened_empty() page.load_body_with_timeout( ''' <p> <h2 id="second">Heading 2</h2> </p>''', 250, ) page.load_body_with_timeout( ''' <p> <a href="#second" style="display:none">go to Heading 2</a> <h2 id="second">Heading 2</h2> </p>''', 500, ).execute_script_with_timeout( 'document.getElementsByTagName("a")[0].style = "display:block";', 750 ) session_browser.element('p').element('a').click() assert "second" in session_browser.driver.current_url
def test_search_is_updated_on_next_actual_action_like_questioning_count( session_browser, ): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.element('ul').all('.will-appear') page.load_body( ''' <ul>Hello to: <li class='will-appear'>Bob</li> <li class='will-appear'>Kate</li> </ul> ''' ) original_count = len(elements) page.load_body( ''' <ul>Hello to: <li class='will-appear'>Bob</li> <li class='will-appear'>Kate</li> <li class='will-appear'>Joe</li> </ul> ''' ) updated_count = len(elements) assert updated_count == 3 assert updated_count != original_count
def test_search_is_updated_on_next_actual_action_like_questioning_displayed( session_browser, ): page = GivenPage(session_browser.driver) page.opened_empty() element = session_browser.all('.will-appear').element_by( have.css_class('special') ) page.load_body( ''' <ul>Hello to: <li class="will-appear">Bob</li> <li class="will-appear special">Kate</li> </ul>''' ) assert element().is_displayed() is True page.load_body( ''' <ul>Hello to: <li class="will-appear">Bob</li> <li class="will-appear special" style="display:none">Kate</li> </ul>''' ) assert element().is_displayed() is False
def test_search_does_not_start_on_creation(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() non_existent_collection = session_browser.all('.not-existing') assert str(non_existent_collection)
def test_waits_nothing(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.all('li').filtered_by( have.css_class('will-appear')) page.load_body(''' <ul>Hello to: <li>Anonymous</li> <li class='will-appear'>Bob</li> <li class='will-appear' style='display:none'>Kate</li> </ul>''') assert len(elements) == 2 page.load_body_with_timeout( ''' <ul>Hello to: <li>Anonymous</li> <li class='will-appear'>Bob</li> <li class='will-appear' style='display:none'>Kate</li> <li class='will-appear'>Joe</li> </ul>''', 500, ) assert len(elements) == 2
def test_search_is_lazy_and_does_not_start_on_creation_for_both_collection_and_indexed( session_browser, ): page = GivenPage(session_browser.driver) page.opened_empty() non_existent_element = session_browser.all('.non-existing').element_by( have.exact_text('Kate')) assert str(non_existent_element)
def test_search_is_postponed_until_actual_action_like_questioning_displayed( session_browser): page = GivenPage(session_browser.driver) page.opened_empty() element = session_browser.element('#will-be-existing-element-id') page.load_body('<h1 id="will-be-existing-element-id">Hello kitty:*</h1>') assert element().is_displayed() is True
def test_counts_invisible_tasks(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.all('.will-appear') page.load_body(''' <ul>Hello to: <li class='will-appear'>Bob</li> <li class='will-appear' style='display:none'>Kate</li> </ul>''') assert len(elements) == 2
def test_searches_exactly_inside_parent(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.element('ul').all('.will-appear') page.load_body(''' <ul>Hello to: <li class='will-appear'>Bob</li> <li class='will-appear'>Kate</li> </ul> <li class='forgotten'>Joe</li>''') assert len(elements) == 2
def test_search_is_updated_on_next_actual_action_like_questioning_displayed( session_browser, ): page = GivenPage(session_browser.driver) page.opened_empty() element = session_browser.element('#will-be-existing-element-id') page.load_body('<h1 id="will-be-existing-element-id">Hello kitty:*</h1>') assert element().is_displayed() is True page.load_body( '<h1 id="will-be-existing-element-id" style="display:none">Hello kitty:*</h1>' ) assert element().is_displayed() is False
def test_search_is_postponed_until_actual_action_like_questioning_count( session_browser, ): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.all('.will-appear') page.load_body(''' <ul>Hello to: <li class='will-appear'>Bob</li> <li class='will-appear'>Kate</li> </ul>''') assert len(elements) == 2
def test_search_is_postponed_until_actual_action_like_questioning_displayed( session_browser): element = (session_browser.element('#will-be-existing-element').element( '.will-exist-inner')) page = GivenPage(session_browser.driver) page.opened_empty() page.load_body(''' <h1 id="will-be-existing-element"> <span class="will-exist-inner">Hello</span> kitty:* </h1>''') answer = element().is_displayed() assert answer is True
def test_search_is_postponed_until_actual_action_like_questioning_displayed( session_browser): page = GivenPage(session_browser.driver) page.opened_empty() element = session_browser.all('.will-appear')[1] page.load_body(''' <ul>Hello to: <li class="will-appear">Bob</li> <li class="will-appear">Kate</li> </ul>''') assert element().is_displayed() is True
def test_type_failure_when_absent(session_browser): browser = session_browser.with_(timeout=1).with_( wait_for_no_overlap_found_by_js=True ) page = GivenPage(browser.driver) page.opened_empty() time_before = time.time() try: browser.element('#text-field').type(' after') except TimeoutException as error: time_spent = time.time() - time_before assert time_spent >= 1 assert "no such element: Unable to locate" in error.msg
def test_counts_invisible_tasks(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.all('li').filtered_by( have.css_class('will-appear') ) page.load_body( ''' <ul>Hello to: <li>Anonymous</li> <li class='will-appear'>Bob</li> <li class='will-appear' style='display:none'>Kate</li> </ul> ''' ) count = len(elements) assert count == 2
def test_waits_for_parent_in_dom_then_visible(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.element('#will-appear').all('.item') page.load_body(''' <li class='item'>Bob</li> <li class='item' style='display:none'>Kate</li>''') page.load_body_with_timeout( ''' <ul id='will-appear' style="display:none">Hello to: <li class='item'>Bob</li> <li class='item' style='display:none'>Kate</li> </ul>''', 0.25, ).execute_script_with_timeout( 'document.getElementsByTagName("ul")[0].style = "display:block";', 0.5) assert len(elements) == 2
def test_does_not_wait_inner(session_browser): page = GivenPage(session_browser.driver) page.opened_empty() elements = session_browser.element('ul').all('.will-appear') page.load_body(''' <ul>Hello to: <li class='will-appear'>Bob</li> <li class='will-appear' style='display:none'>Kate</li> </ul>''') assert len(elements) == 2 page.load_body_with_timeout( ''' <ul>Hello to: <li class='will-appear'>Bob</li> <li class='will-appear' style='display:none'>Kate</li> <li class='will-appear'>Joe</li> </ul>''', 500) assert len(elements) == 2