コード例 #1
0
    def test_filter_tasks(self):
        browser.open('https://todomvc4tasj.herokuapp.com/')
        clear_completed_js_loaded = "return $._data($('#clear-completed').get(0), 'events').hasOwnProperty('click')"
        browser.wait_to(have.js_returned(True, clear_completed_js_loaded))
        browser.wait_to(have.title(u'TroopJS • TodoMVC'))

        browser.element('#new-todo').should(
            be.enabled).set_value('a').press_enter()
        browser.element('#new-todo').should(
            be.enabled).set_value('b').press_enter()
        browser.element('#new-todo').should(
            be.enabled).set_value('c').press_enter()

        browser.all("#todo-list>li").should(have.texts('a', 'b', 'c'))

        browser.all("#todo-list>li").element_by(
            have.exact_text('b')).find(".toggle").click()

        browser.element(by.link_text("Active")).click()
        browser.all("#todo-list>li").filtered_by(be.visible).should(
            have.texts('a', 'c'))

        browser.element(by.link_text("Completed")).click()
        browser.all("#todo-list>li").filtered_by(be.visible).should(
            have.texts('b'))
コード例 #2
0
    def test_selene_demo(self):
        tasks = browser.all("#todo-list>li")
        active_tasks = tasks.filtered_by(have.css_class("active"))

        browser.open(app_url)
        browser.should(have.js_returned(True, is_TodoMVC_loaded))

        for task_text in ["1", "2", "3"]:
            browser.element("#new-todo").set_value(task_text).press_enter()
        tasks.should(have.texts("1", "2",
                                "3")).should_each(have.css_class("active"))
        browser.element("#todo-count").should(have.text('3'))

        tasks[2].element(".toggle").click()
        active_tasks.should(have.texts("1", "2"))
        active_tasks.should(have.size(2))

        tasks.filtered_by(have.css_class("completed")).should(have.texts("3"))
        tasks.element_by(not_(have.css_class("completed"))).should(
            have.text("1"))
        tasks.filtered_by(not_(have.css_class("completed"))).should(
            have.texts("1", "2"))

        browser.element(by.link_text("Active")).click()
        tasks[:2].should(have.texts("1", "2"))
        tasks[2].should(be.hidden)

        browser.element(by.id("toggle-all")).click()
        browser.element("//*[@id='clear-completed']").click()
        tasks.should(be.empty)
コード例 #3
0
ファイル: test_ecosia.py プロジェクト: rodinant/selene
def test_search():
    browser.open('https://www.ecosia.org/')
    browser.element(by.name('q')).type('github yashaka selene').press_enter()

    browser.all('.result').first.element('.result-url').click()

    browser.should(have.title_containing('yashaka/selene'))
コード例 #4
0
ファイル: test_search.py プロジェクト: AnnaChupis/ecosia-test
def test_results_accuracy():
    browser.open('https://www.ecosia.org/')

    browser.element('[name=q]').type('yashaka selene').press_enter()
    browser.all('.result').first.click()

    browser.all('[href="/yashaka/selene"]').should(have.size(3))
コード例 #5
0
def test_can_init_default_browser_on_visit():
    browser.open(empty_page)
    GivenPage(browser.driver).opened_with_body('''
        <h1 id="header">Selene</h1>''')

    browser.element("#header").should(have.exact_text("Selene"))
    assert browser.driver.name == 'chrome'
コード例 #6
0
def test_duckduckgo():
    """
    Straightforward/PageObjectLess style
    ===================================

    GO FOR:
    * KISS (Keep It Simple Stupid), straightforward style
      * easy for newbies in automation (no need to learn modules/OOP(classes))
      * easy for some DEVs if they will use these tests (and they should!)
        they know selectors and internals of app they develop
        hence, building more abstractions (modules/classes) on top of more
        low level straightforward code (like below) would add too much complexity
        to them, and harder in day-to-day usage

    TRADEOFFS:
    - given selectors are duplicated all over the project code base
      when you want to change it
      then you have to use global Find&Replace text,
           with sometimes pretty thorough manual checks line by line
           all places where the change will be applied.
           You CAN'T use some refactoring features of IDE like Refactor>Rename
    """

    browser.open('https://duckduckgo.com/')

    browser.element('[name=q]')\
        .should(be.blank)\
        .type('yashaka selene python').press_enter()
    browser.all('.result__body') \
        .should(have.size_greater_than(5)) \
        .first.should(have.text('User-oriented Web UI browser tests'))

    browser.all('.result__body').first.element('a').click()
    browser.should(have.title_containing('yashaka/selene'))
コード例 #7
0
def test_no_hold_on_default_false():
    browser.open('http://todomvc.com/examples/emberjs/')
    driver = browser.driver
    browser.element('#new-todo').type('a').press_enter()

    atexit._run_exitfuncs()

    assert not Help(driver).has_browser_still_alive()
コード例 #8
0
def test_shared_browser_reopens_on_url_open_action():
    browser.open('https://duckduckgo.com/')
    browser.element('[id="search_form_input_homepage"]').click()

    browser.quit()
    browser.open('https://duckduckgo.com/')

    browser.element('[id="search_form_input_homepage"]').click()
コード例 #9
0
def test_shared_browser_reopens_on_url_open_action():
    browser.open('http://google.ru')
    browser.element('[name="q"]').click()

    browser.quit()
    browser.open('http://google.ru')

    browser.element('[name="q"]').click()
コード例 #10
0
class MainPage(Header, BasePage):
    path = ''

    edit_all = browser.element(by.xpath("//small[text()='Edit All']"))
    clear_all = browser.element(by.xpath("//small[text()='Clear All']"))
    list_vew = browser.element(
        by.xpath("//button[contains(text(),'List View')]"))
    search_field = browser.element(by.name("searchText"))
    sort_by = browser.element(by.xpath("//span[text()='Sort By']"))
コード例 #11
0
class LoginPage(Header, BasePage):
    path = ''

    email_field = browser.element(by.name('email'))
    password_field = browser.element(by.name('password'))
    do_not_remember_your_password_btn = browser.element(
        by.class_name('auth0-lock-input-wrap'))
    show_password_btn = browser.element(
        by.xpath("//label[@title='Show password']"))
コード例 #12
0
def test_find_link_text():
    browser.open('http://suninjuly.github.io/find_link_text')
    browser.element('[href="find_link_text_redirect13.html"]').click()

    # Add
    browser.element('[name=first_name]').type('Elena').press_enter()
    browser.element('[name=last_name]').type('Sheremet').press_enter()
    browser.element('.city').type('Dnipro').press_enter()
    browser.element('#country').type('Ukraine').press_enter()
コード例 #13
0
def test_hold_on_explicit_true():
    browser.config.hold_browser_open = True
    browser.open('http://todomvc.com/examples/emberjs/')
    browser.element('#new-todo').type('a').press_enter()

    atexit._run_exitfuncs()
    browser.element('#new-todo').type('b').press_enter()

    browser.all('#todo-list>li').should(have.texts('a', 'b'))
コード例 #14
0
def test_can_init_custom_browser_on_visit():
    browser.config.browser_name = 'firefox'

    browser.open(empty_page)
    GivenPage(browser.driver).opened_with_body('''
        <a id="selene_link">Selene site</a>
        ''')

    browser.element("#selene_link").should(have.exact_text("Selene site"))
    assert browser.driver.name == 'firefox'
コード例 #15
0
    def assert_action_successful_on_reload(entity):
        browser.element('[href*=notification_message]').click()
        notification = browser.element('#flash')
        webelement = notification()
        actual = webelement.text
        expected = 'Action successful\n×'

        if actual != expected:
            raise AssertionError(f'notification message was wrong:'
                                 f'\texpected: {expected}'
                                 f'\t  actual: {actual}')
コード例 #16
0
def test_shared_browser_not_reopen_on_action_after_been_closed():
    browser.open('http://google.ru')
    browser.element('[name="q"]').click()

    browser.quit()

    with pytest.raises(RuntimeError) as error:
        browser.element('[name="q"]').click()
    assert 'Webdriver has been closed.' in str(error.value)
    assert 'You need to call open(url) to open a browser again.' in str(
        error.value)
コード例 #17
0
def test_shared_browser_not_reopen_on_action_after_been_closed():
    browser.open('https://duckduckgo.com/')
    browser.element('[id="search_form_input_homepage"]').click()

    browser.quit()

    with pytest.raises(RuntimeError) as error:
        browser.element('[id="search_form_input_homepage"]').click()
    assert 'Webdriver has been closed.' in str(error.value)
    assert 'You need to call open(url) to open a browser again.' in str(
        error.value)
コード例 #18
0
def setup_function():
    global selenium_browser
    selenium_browser = get_test_driver()
    selenium_browser.get(TODOMVC_URL)
    WebDriverWait(selenium_browser, 4).until(
        expected_conditions.visibility_of_element_located(
            (By.CSS_SELECTOR, "#new-todo")))

    browser.config.driver = get_test_driver()
    browser.open(TODOMVC_URL)
    browser.element("#new-todo").should(be.visible)
コード例 #19
0
def test_search():
    browser.open('https://google.com/ncr')

    browser.element(by.name('q')).should(be.blank)\
        .type('python selene').press_enter()

    results = browser.all('#search .g')
    results.should(have.size_greater_than_or_equal(6))
    results.first.should(have.text('Concise API for Selenium'))
    results.first.element('.r>a').click()

    browser.should(have.title_containing('yashaka/selene'))
コード例 #20
0
def x_test_hold_on_explicit_true__when__set_after_open():
    """
    todo: probably it will not work right now... should we bother?
    """
    browser.open('http://todomvc.com/examples/emberjs/')
    browser.element('#new-todo').type('a').press_enter()

    browser.config.hold_browser_open = True
    atexit._run_exitfuncs()
    browser.element('#new-todo').type('b').press_enter()

    browser.all('#todo-list>li').should(have.texts('a', 'b'))
コード例 #21
0
def test_wait_for_notification_after_reload_v5():
    """
    with default rendering (built into selene's condition) of error message on failure
    AND simplified syntax with lambdas
    """
    browser.open(
        'https://the-internet.herokuapp.com/notification_message_rendered')

    browser.wait.for_(lambda _: (
        browser.element('[href*=notification_message]').click(),
        have.exact_text('Action successful\n×')(browser.element('#flash')),
    ))
コード例 #22
0
def test_one_element_when_enabled():
    browser.config.timeout = 0.5
    browser.config.log_outer_html_on_failure = True
    browser.open('http://todomvc.com/examples/emberjs/')

    message = None
    try:
        browser.element('#new-todo').should(have.attribute('wrong_attr'))
    except Exception as e:
        message = str(e)

    assert message is not None
    assert 'Actual webelement:' in message
コード例 #23
0
def test_complete_task():
    browser.open('http://todomvc.com/examples/emberjs/')

    browser.element('#new-todo').type('a').press_enter()
    browser.element('#new-todo').type('b').press_enter()
    browser.element('#new-todo').type('c').press_enter()
    browser.all('#todo-list>li').should(have.exact_texts('a', 'b', 'c'))

    browser.element('#todo-list>li:nth-child(2)').should(have.exact_text('b'))
    browser.element('#todo-list>li:nth-child(2) .toggle').click()
    browser.all('#todo-list>li.completed').should(have.exact_text('b'))
    browser.all('#todo-list>li:not(.completed)').should(
        have.exact_texts('a', 'c'))
コード例 #24
0
def test_can_make_screenshot_automatically():
    browser.open(EMPTY_PAGE_URL)
    config.timeout = 0.1

    with pytest.raises(TimeoutException):
        browser.element("#selene_link").should(have.exact_text("Selen site"))

    expected = os.path.join(
        get_default_screenshot_folder(),
        f'{get_screen_id()}.png',
    )
    assert os.path.exists(expected)
    assert os.path.isfile(expected)
コード例 #25
0
def test_todomvc_starts_with_cleaned_storage_at_new_browser():
    # When
    browser.open(todomvc.url)

    # Then
    (browser.all("#todo-list>li").should(have.size(0)).should(
        have.no.texts('todo from A test')))

    # When
    browser.element('#new-todo').set_value('todo from B test').press_enter()

    # Then
    browser.all("#todo-list>li").should(have.texts('todo from B test'))
コード例 #26
0
def test_wait_for_notification_after_reload_v6():
    """
    with default rendering (built into selene's condition) of error message on failure
    and simplified syntax with lambdas
    AND with optimised performance and removed potential side effects of "nested waiting"
    """
    browser.open(
        'https://the-internet.herokuapp.com/notification_message_rendered')

    browser.wait.for_(lambda _: (
        browser.element('[href*=notification_message]')().click(),
        have.exact_text('Action successful\n×')(browser.element('#flash')),
    ))
    '''
コード例 #27
0
def test_find_xpath_form():
    browser.open('http://suninjuly.github.io/find_xpath_form')

    # Add
    browser.element('[name=first_name]').type('Elena')
    browser.element('[name=last_name]').type('Sheremet')
    browser.element('.city').type('Dnipro')
    browser.element('#country').type('Ukraine')

    button = browser.element('/html/body/div/form/div[6]/button[3]')
    button.click()
コード例 #28
0
def test_can_get_latest_screenshot_path():
    config.reports_folder = (
        os.path.dirname(os.path.abspath(__file__)) +
        f'/../../build/screenshots_{next(browser.config.counter)}')
    browser.open(EMPTY_PAGE_URL)
    config.timeout = 0.1

    with pytest.raises(TimeoutException):
        browser.element("#s").should(be.visible)

    picture = browser.last_screenshot
    expected = os.path.join(config.reports_folder, f'{get_screen_id()}.png')
    assert picture == expected
    assert os.path.exists(picture)
    assert os.path.isfile(picture)
コード例 #29
0
ファイル: page_auth.py プロジェクト: kydbakep/test-automation
 def __set_registration_data(self):
     data = REGISTRATION_DATA
     first_name = data['first_name']
     last_name = data['last_name']
     self.__first_name_input.with_(Config(timeout=10)).should(
         be.visible).set_value(first_name)
     self.__last_name_input.set_value(last_name)
     self.__company_name_input.set_value(data['company_name'])
     set_select_option(
         browser.element(self.__country_select)(), data['country'])
     self.__city_input.set_value(data['city'])
     self.__phone_input.click().type(data['phone'])
     set_select_option(
         browser.element(self.__template_select)(), data['template'])
     return {'first_name': first_name, 'last_name': last_name}
コード例 #30
0
ファイル: browser.py プロジェクト: rodinant/selene
def element(css_or_xpath_or_by: Union[str, tuple]) -> Element:
    warnings.warn(
        'selene.browser.element is deprecated, '
        'use `from selene.support.shared import browser` import',
        DeprecationWarning,
    )
    return browser.element(css_or_xpath_or_by)