コード例 #1
0
def _deluge_ensure_logged_in(browser):
    """Ensure that password dialog is answered and we can interact."""
    url = config['DEFAULT']['url'] + '/deluge'

    def service_is_available():
        if browser.is_element_present_by_xpath(
                '//h1[text()="Service Unavailable"]'):
            access_url(browser, 'deluge')
            return False

        return True

    if browser.url != url:
        browser.visit(url)
        # After a backup restore, service may not be available immediately
        eventually(service_is_available)

        time.sleep(1)  # Wait for Ext.js application in initialize

    if _deluge_get_active_window_title(browser) != 'Login':
        return

    browser.find_by_id('_password').first.fill('deluge')
    _deluge_click_active_window_button(browser, 'Login')

    assert eventually(
        lambda: _deluge_get_active_window_title(browser) != 'Login')
    eventually(browser.is_element_not_present_by_css,
               args=['#add.x-item-disabled'],
               timeout=0.3)
コード例 #2
0
def _deluge_open_connection_manager(browser):
    """Open the connection manager dialog if not already open."""
    title = 'Connection Manager'
    if _deluge_get_active_window_title(browser) == title:
        return

    browser.find_by_css('button.x-deluge-connection-manager').first.click()
    eventually(lambda: _deluge_get_active_window_title(browser) == title)
コード例 #3
0
def transmission_upload_sample_torrent(browser):
    """Upload a sample torrent into transmission."""
    browser.visit(config['DEFAULT']['url'] + '/transmission')
    file_path = os.path.join(os.path.dirname(__file__), '..', 'data',
                             'sample.torrent')
    browser.click_link_by_id('toolbar-open')
    eventually(browser.is_element_not_present_by_css,
               args=['#upload-container[style="display: none;"]'])
    browser.attach_file('torrent_files[]', [file_path])
    browser.click_link_by_id('upload_confirm_button')
    eventually(browser.is_element_present_by_css,
               args=['#torrent_list .torrent'])
コード例 #4
0
def syncthing_add_folder(browser, folder_name, folder_path):
    """Add a new folder to Synthing."""
    _syncthing_load_main_interface(browser)
    add_folder_xpath = '//button[contains(@ng-click, "addFolder")]'
    browser.find_by_xpath(add_folder_xpath).click()

    folder_dialog = browser.find_by_id('editFolder').first
    eventually(lambda: folder_dialog.visible)
    browser.find_by_id('folderLabel').fill(folder_name)
    browser.find_by_id('folderPath').fill(folder_path)
    save_folder_xpath = './/button[contains(@ng-click, "saveFolder")]'
    folder_dialog.find_by_xpath(save_folder_xpath).first.click()
    eventually(lambda: not folder_dialog.visible)
コード例 #5
0
def syncthing_remove_folder(browser, folder_name):
    """Remove a folder from Synthing."""
    _syncthing_load_main_interface(browser)

    # Find folder
    folder = None
    for current_folder in browser.find_by_css('#folders > .panel'):
        name = current_folder.find_by_css('.panel-title-text span').first.text
        if name == folder_name:
            folder = current_folder
            break

    # Edit folder button
    folder.find_by_css('button.panel-heading').first.click()
    eventually(lambda: folder.find_by_css('div.collapse.in'))
    edit_folder_xpath = './/button[contains(@ng-click, "editFolder")]'
    edit_folder_button = folder.find_by_xpath(edit_folder_xpath).first
    edit_folder_button.click()

    # Edit folder dialog
    folder_dialog = browser.find_by_id('editFolder').first
    eventually(lambda: folder_dialog.visible)
    remove_button_xpath = './/button[contains(@data-target, "remove-folder")]'
    folder_dialog.find_by_xpath(remove_button_xpath).first.click()

    # Remove confirmation dialog
    remove_folder_dialog = browser.find_by_id('remove-folder-confirmation')
    eventually(lambda: remove_folder_dialog.visible)
    remove_button_xpath = './/button[contains(@ng-click, "deleteFolder")]'
    remove_folder_dialog.find_by_xpath(remove_button_xpath).first.click()

    eventually(lambda: not folder_dialog.visible)
コード例 #6
0
ファイル: site.py プロジェクト: peacekeeper/plinth
def verify_coquelicot_upload_password(browser, password):
    browser.visit(config['DEFAULT']['url'] + '/coquelicot')
    browser.find_by_id('upload_password').fill(password)
    actions = ActionChains(browser.driver)
    actions.send_keys(Keys.RETURN)
    actions.perform()
    assert eventually(browser.is_element_present_by_css,
                      args=['div[style*="display: none;"]'])
コード例 #7
0
def upload_file_to_coquelicot(browser, file_path, password):
    """Upload a local file from disk to coquelicot."""
    verify_coquelicot_upload_password(browser, password)
    browser.attach_file('file', file_path)
    interface.submit(browser)
    assert eventually(browser.is_element_present_by_css,
                      args=['#content .url'])
    url_textarea = browser.find_by_css('#content .url textarea').first
    return url_textarea.value
コード例 #8
0
def deluge_remove_all_torrents(browser):
    """Remove all torrents from deluge."""
    _deluge_ensure_connected(browser)

    while browser.find_by_css('#torrentGrid .torrent-name'):
        browser.find_by_css('#torrentGrid .torrent-name').first.click()

        # Click remove toolbar button
        browser.find_by_id('remove').first.click()

        # Remove window shows up
        assert eventually(lambda: _deluge_get_active_window_title(browser) ==
                          'Remove Torrent')

        _deluge_click_active_window_button(browser, 'Remove With Data')

        # Remove window disappears
        assert eventually(lambda: not _deluge_get_active_window_title(browser))
コード例 #9
0
def _deluge_ensure_connected(browser):
    """Type the connection password if required and start Deluge daemon."""
    _deluge_ensure_logged_in(browser)

    # Change Default Password window appears once.
    if _deluge_get_active_window_title(browser) == 'Change Default Password':
        _deluge_click_active_window_button(browser, 'No')

    assert eventually(browser.is_element_not_present_by_css,
                      args=['#add.x-item-disabled'])
コード例 #10
0
def verify_coquelicot_upload_password(browser, password):
    browser.visit(config['DEFAULT']['url'] + '/coquelicot')
    # ensure the password form is scrolled into view
    browser.execute_script('window.scrollTo(100, 0)')
    browser.find_by_id('upload_password').fill(password)
    actions = ActionChains(browser.driver)
    actions.send_keys(Keys.RETURN)
    actions.perform()
    assert eventually(browser.is_element_present_by_css,
                      args=['div[style*="display: none;"]'])
コード例 #11
0
def ttrss_unsubscribe(browser):
    """Unsubscribe from a feed in TT-RSS."""
    _ttrss_load_main_interface(browser)
    expand = browser.find_by_css('span.dijitTreeExpandoClosed')
    if expand:
        expand.first.click()

    browser.find_by_text('Planet Debian').click()
    browser.execute_script("quickMenuGo('qmcRemoveFeed')")
    prompt = browser.get_alert()
    prompt.accept()

    assert eventually(_ttrss_is_feed_shown, [browser, True])
コード例 #12
0
def ttrss_subscribe(browser):
    """Subscribe to a feed in TT-RSS."""
    _ttrss_load_main_interface(browser)
    browser.find_by_text('Actions...').click()
    browser.find_by_text('Subscribe to feed...').click()
    browser.find_by_id('feedDlg_feedUrl').fill(
        'https://planet.debian.org/atom.xml')
    browser.find_by_text('Subscribe').click()
    if browser.is_text_present('You are already subscribed to this feed.'):
        browser.find_by_text('Cancel').click()

    expand = browser.find_by_css('span.dijitTreeExpandoClosed')
    if expand:
        expand.first.click()

    assert eventually(_ttrss_is_feed_shown, [browser])
コード例 #13
0
def deluge_upload_sample_torrent(browser):
    """Upload a sample torrent into deluge."""
    _deluge_ensure_connected(browser)

    number_of_torrents = _deluge_get_number_of_torrents(browser)

    # Click add toolbar button
    browser.find_by_id('add').first.click()

    # Add window appears
    eventually(
        lambda: _deluge_get_active_window_title(browser) == 'Add Torrents')

    file_path = os.path.join(os.path.dirname(__file__), '..', 'data',
                             'sample.torrent')

    if browser.find_by_id('fileUploadForm'):  # deluge-web 2.x
        browser.attach_file('file', file_path)
    else:  # deluge-web 1.x
        browser.find_by_css('button.x-deluge-add-file').first.click()

        # Add from file window appears
        eventually(lambda: _deluge_get_active_window_title(browser) ==
                   'Add from File')

        # Attach file
        browser.attach_file('file', file_path)

        # Click Add
        _deluge_click_active_window_button(browser, 'Add')

        eventually(
            lambda: _deluge_get_active_window_title(browser) == 'Add Torrents')

    # Click Add
    time.sleep(1)
    _deluge_click_active_window_button(browser, 'Add')

    eventually(
        lambda: _deluge_get_number_of_torrents(browser) > number_of_torrents)
コード例 #14
0
def _syncthing_load_main_interface(browser):
    """Close the dialog boxes that many popup after visiting the URL."""
    access_url(browser, 'syncthing')

    def service_is_available():
        if browser.is_element_present_by_xpath(
                '//h1[text()="Service Unavailable"]'):
            access_url(browser, 'syncthing')
            return False

        return True

    # After a backup restore, service may not be available immediately
    eventually(service_is_available)

    # Wait for javascript loading process to complete
    browser.execute_script('''
        document.is_ui_online = false;
        var old_console_log = console.log;
        console.log = function(message) {
            old_console_log.apply(null, arguments);
            if (message == 'UIOnline') {
                document.is_ui_online = true;
                console.log = old_console_log;
            }
        };
    ''')
    eventually(lambda: browser.evaluate_script('document.is_ui_online'),
               timeout=5)

    # Dismiss the Usage Reporting consent dialog
    usage_reporting = browser.find_by_id('ur').first
    eventually(lambda: usage_reporting.visible, timeout=2)
    if usage_reporting.visible:
        yes_xpath = './/button[contains(@ng-click, "declineUR")]'
        usage_reporting.find_by_xpath(yes_xpath).first.click()
        eventually(lambda: not usage_reporting.visible)
コード例 #15
0
def transmission_remove_all_torrents(browser):
    """Remove all torrents from transmission."""
    browser.visit(config['DEFAULT']['url'] + '/transmission')
    while True:
        torrents = browser.find_by_css('#torrent_list .torrent')
        if not torrents:
            break

        torrents.first.click()
        eventually(browser.is_element_not_present_by_css,
                   args=['#toolbar-remove.disabled'])
        browser.click_link_by_id('toolbar-remove')
        eventually(browser.is_element_not_present_by_css,
                   args=['#dialog-container[style="display: none;"]'])
        browser.click_link_by_id('dialog_confirm_button')
        eventually(browser.is_element_present_by_css,
                   args=['#toolbar-remove.disabled'])
コード例 #16
0
def _ttrss_load_main_interface(browser):
    """Load the TT-RSS interface."""
    access_url(browser, 'tt-rss')
    overlay = browser.find_by_id('overlay')
    eventually(lambda: not overlay.visible)
コード例 #17
0
def ejabberd_has_contact(browser):
    """Check whether the contact is in Ejabberd user's roster."""
    return eventually(site.jsxc_has_contact, [browser])
コード例 #18
0
def verify_inaccessible_share(browser, name):
    """Verify that given URL for a given share name denies permission."""
    url = '{}/share/{}'.format(default_url, name)
    browser.visit(url)
    eventually(lambda: '/plinth' in browser.url, args=[])
コード例 #19
0
def service_should_be_running(session_browser, service_name):
    assert eventually(service.is_running, args=[session_browser, service_name])
コード例 #20
0
def verify_mediawiki_no_create_account_link(browser):
    browser.visit(config['DEFAULT']['url'] +
                  '/mediawiki/index.php/Special:CreateAccount')
    assert eventually(browser.is_element_not_present_by_id,
                      args=['wpCreateaccount'])
コード例 #21
0
def login_to_mediawiki_with_credentials(browser, username, password):
    _login_to_mediawiki(browser, username, password)
    # Had to put it in the same step because sessions don't
    # persist between steps
    assert eventually(browser.is_element_present_by_id, args=['t-upload'])
コード例 #22
0
def mediawiki_has_main_page(browser):
    """Check if mediawiki main page exists."""
    return eventually(_mediawiki_has_main_page, [browser])
コード例 #23
0
def verify_mediawiki_no_anonymous_reads_edits_link(browser):
    browser.visit(config['DEFAULT']['url'] + '/mediawiki')
    assert eventually(browser.is_element_not_present_by_id,
                      args=['ca-nstab-main'])
    assert eventually(browser.is_element_present_by_id,
                      args=['ca-nstab-special'])
コード例 #24
0
ファイル: service.py プロジェクト: peacekeeper/plinth
def service_should_not_be_running(browser, service_name):
    assert eventually(service.is_not_running, args=[browser, service_name])