def test_waits_first_for_inner_presence_in_dom_then_visibility( session_browser, ): page = GivenPage(session_browser.driver) page.opened_with_body(''' <p> <h2 id="second">Heading 2</h2> </p>''') page.load_body_with_timeout( ''' <p> <a href="#second" style="display:none">go to Heading 2</a> <h2 id="second">Heading 2</h2> </p>''', 0.25, ).execute_script_with_timeout( 'document.getElementsByTagName("a")[0].style = "display:block";', 0.5) session_browser.element('p').element('a').click() assert "second" in session_browser.driver.current_url
def test_fails_on_timeout_during_waits_first_for_present_in_dom_then_visibility( session_browser): browser = session_browser.with_(timeout=0.25) page = GivenPage(browser.driver) page.opened_with_body(''' <h2 id="second">Heading 2</h2>''') page.load_body_with_timeout( ''' <a href="#second" style="display:none">go to Heading 2</a> <h2 id="second">Heading 2</h2>''', 250)\ .execute_script_with_timeout( 'document.getElementsByTagName("a")[0].style = "display:block";', 500) element = browser.element("a") with pytest.raises(TimeoutException): element.click() assert "second" not in session_browser.driver.current_url
def test_fails_on_timeout_during_waits_for_present_in_dom_and_visibility( session_browser, ): browser = session_browser.with_(timeout=0.25) page = GivenPage(browser.driver) page.opened_with_body( ''' <h2 id="second">Heading 2</h2>''' ) page.load_body_with_timeout( ''' <a href="#second">go to Heading 2</a> <h2 id="second">Heading 2</h2>''', 0.5, ) with pytest.raises(TimeoutException): browser.all('a').element_by(have.exact_text('go to Heading 2')).click() assert "second" not in session_browser.driver.current_url
def test_inner_element_search_fails_with_message_when_implicitly_waits_for_condition_mismatch_on_inner_element( session_browser): browser = session_browser.with_(timeout=0.1) page = GivenPage(browser.driver) page.opened_with_body(''' <div id='container'> <button id='hidden-button' style='display:none'>You can't click me, ha ha! :P</button> </div> ''') with pytest.raises(TimeoutException) as ex: browser.element('#container').element('#hidden-button').click() assert exception_message(ex) == \ ['Timed out after 0.1s, while waiting for:', "browser.element(('css selector', '#container')).element(('css selector', " "'#hidden-button')).click", '', 'Reason: ElementNotInteractableException: Message: element not interactable', '(Session info: *)']
def test_click_waits_for_no_overlay(session_browser): browser = session_browser.with_(timeout=0.5) page = GivenPage(browser.driver) page.opened_with_body( ''' <div id="overlay" style= ' display:block; position: fixed; display: block; width: 100%; height: 100%; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0,0,0,0.1); z-index: 2; cursor: pointer; ' > </div> <a href="#second">go to Heading 2</a> <h2 id="second">Heading 2</h2> ''' ) before_call = time.time() page.execute_script_with_timeout( ''' document.getElementById('overlay').style.display='none' ''', 250, ) browser.element('a').click() time_diff = time.time() - before_call assert 0.25 < time_diff < 0.5 assert "second" in browser.driver.current_url
def test_search_is_updated_on_next_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_with_body(''' <h1 id="will-be-existing-element"> <span class="will-exist-inner">Hello</span> kitty:* </h1> ''') assert element().is_displayed() is True page.load_body(''' <h1 id="will-be-existing-element"> <span class="will-exist-inner" style="display:none"> Hello </span> kitty:* </h1>''') new_answer = element().is_displayed() assert new_answer is False
def test_fails_on_timeout_during_waiting_for_inner_in_dom_and_visibility( session_browser): browser = session_browser.with_(timeout=0.1) page = GivenPage(browser.driver) page.opened_with_body( ''' <p> <h2 id="second">Heading 2</h2> </p>''') page.load_body_with_timeout( ''' <p> <a href="#second">go to Heading 2</a> <h2 id="second">Heading 2</h2> </p>''', 250) with pytest.raises(TimeoutException): browser.element('p').element('a').click() assert "second" not in browser.driver.current_url
def test_inner_element_search_fails_with_message_when_implicitly_waits_for_condition_failed_on_parent_element( session_browser): browser = session_browser.with_(timeout=0.1) page = GivenPage(browser.driver) page.opened_with_body(''' <div> <button id='button'>Try to click me</button> </div> ''') with pytest.raises(TimeoutException) as ex: browser.element('#not-existing').element('#button').click() assert exception_message(ex)[:10] == \ ['Timed out after 0.1s, while waiting for:', "browser.element(('css selector', '#not-existing')).element(('css selector', " "'#button')).click", '', 'Reason: NoSuchElementException: Message: no such element: Unable to locate ' 'element: {"method":"css selector","selector":"#not-existing"}', '(Session info: *)']
def test_element_search_fails_with_message_when_explicitly_waits_for_not_condition( session_browser, ): browser = session_browser.with_(timeout=0.1) page = GivenPage(browser.driver) page.opened_with_body( ''' <label id='element'>Hello world!</label> ''' ) with pytest.raises(TimeoutException) as ex: browser.element('#element').should( have._not_.exact_text('Hello world!') ) assert exception_message(ex) == [ 'Timed out after 0.1s, while waiting for:', "browser.element(('css selector', '#element')).has no exact text Hello world!", '', 'Reason: ConditionNotMatchedError: condition not matched', ]
def test_indexed_selement_search_fails_with_message_when_implicitly_waits_for_condition_failed_on_collection( session_browser, ): browser = session_browser.with_(timeout=0.1) page = GivenPage(browser.driver) page.opened_with_body( ''' <div> <button id='button'>Try to click me</button> </div> ''' ) with pytest.raises(TimeoutException) as ex: browser.all('button')[1].click() assert exception_message(ex) == [ 'Timed out after 0.1s, while waiting for:', "browser.all(('css selector', 'button'))[1].click", '', 'Reason: AssertionError: Cannot get element with index 1 from webelements ' 'collection with length 1', ]
def test_nested_elements_search(session_browser): page = GivenPage(session_browser.driver) page.opened_with_body(''' <div id="container"> <div> <div> <label>First</label> </div> <div> <a href="#first">go to Heading 1</a> </div> </div> <div> <div> <label>Second</label> <div> <a href="#second">go to Heading 2</a> <a href="#third">go to Heading 3</a> </div> </div> <div> </div> </div> </div> <h1 id="first">Heading 1</h2> <h2 id="second">Heading 2</h2> <h2 id="third">Heading 3</h2> ''') session_browser.element('#container') \ .element(by.text('Second')) \ .element('./following-sibling::*') \ .element(by.partial_text('Heading 3')) \ .click() assert "third" in session_browser.driver.current_url
def test_type_failure_when_overlapped(session_browser): browser = session_browser.with_(timeout=1).with_( wait_for_no_overlap_found_by_js=True ) page = GivenPage(browser.driver) page.opened_with_body( ''' <div id="overlay" style="display: block; background-color: rgba(0, 0, 0, 0.336); position: fixed; height: 100%; width: 100%; top: 0; left: 0; right: 0; bottom: 0; z-index: 10000"> </div> <input id="text-field" value="before"></input> ''' ) 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 browser.element('#text-field').should(have.value('before')) assert ( 'Element: <input id="text-field" value="before">' '\n\tis overlapped by: <div id="overlay"' ) in error.msg