def test_waits_for_present_in_dom_and_visibility(session_browser): page = GivenPage(session_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, ) session_browser.all('a')[0].click() assert "second" in session_browser.driver.current_url
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').element_by( have.exact_text('Kate') ) 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_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) 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_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>''', 500, ) element = browser.element("a") with pytest.raises(TimeoutException): element.click() assert "second" not in session_browser.driver.current_url
def test_waits_first_for_present_in_dom_then_visibility(session_browser): page = GivenPage(session_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 = (session_browser.all('a').element_by( have.exact_text('go to Heading 2'))) element.click() assert "second" in session_browser.driver.current_url
def test_can_scroll_to_via_js(function_browser): function_browser.driver.set_window_size(300, 200) GivenPage(function_browser.driver).opened_with_body( ''' <div id="paragraph" style="margin: 400px"> </div> <a id="not-viewable-link" href="#header"/> <h1 id="header">Heading 1</h2> ''' ) link = function_browser.element("#not-viewable-link") # browser.driver().execute_script("arguments[0].scrollIntoView();", link) # - this code does not work because SeleneElement is not JSON serializable, and I don't know the way to fix it # - because all available in python options needs a change to json.dumps call - adding a second parameter to it # and specify a custom encoder, but we can't change this call inside selenium webdriver implementation function_browser.driver.execute_script( "arguments[0].scrollIntoView();", link() ) link.click() # actually, selene .click() scrolls to any element in dom, so it's not an option fo # in this case we should find another way to check page is scrolled down or to choose another script. assert "header" in function_browser.driver.current_url
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_search_is_postponed_until_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
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_inner_presence_in_dom_and_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">go to Heading 2</a> <h2 id="second">Heading 2</h2> </p>''', 250, ) session_browser.element('p').element('a').click() assert "second" in session_browser.driver.current_url
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_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_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 setup_module(m): driver = webdriver.Chrome(ChromeDriverManager().install()) browser.set_driver(driver) global GIVEN_PAGE GIVEN_PAGE = GivenPage(driver)
def test_have_url_containing(session_browser): GivenPage(session_browser.driver).opened_empty() session_browser.should(have.url_containing('empty.html')) session_browser.should(have.no.url_containing('start_page.xhtml'))
def test_have_url(session_browser): GivenPage(session_browser.driver).opened_empty() session_browser.should(have.url(session_browser.driver.current_url)) session_browser.should(have.no.url( session_browser.driver.current_url[:-1]))
def setup_module(m): driver = webdriver.Firefox() browser.set_driver(driver) global GIVEN_PAGE GIVEN_PAGE = GivenPage(driver)