Monthly Archives: Жовтень 2013

Автоматизація браузера з Selenium

Виявляється, Selenium це набагато простіше ніж я думав. Щоб його встановити досить, як зазвичай написати

sudo pip install selenium

З читання раджу:

А зараз я спробую написати скрипт, який робить дві речі: залишає під цією публікацією коментар і перевіряє що на сторінці з’явився вміст цього коментаря… Такий собі тест-кейс:

from time import sleep
from getpass import getpass, getuser

from selenium import webdriver

def main():
    user = raw_input('Wordpress.com username: ')
    password = getpass('Password: ')
    
    print 'Starting browser ...'
    browser = webdriver.Firefox()
    # browser.maximize_window()

    login(browser, user, password)

    print 'Opening page'
    browser.get('http://bunyk.wordpress.com/2013/10/04/selenium-browser-automation/')

    comment = 'Hello from selenium on {platform} with {name} {version}'.format(
        platform=browser.capabilities['platform'],
        name=browser.capabilities['browserName'],
        version=browser.capabilities['version'],
    )

    add_comment(browser, comment)

    assert comment in browser.page_source

    print 'Closing browser'
    browser.close()

def add_comment(browser, text):
    print 'Filling comment field ...'
    textarea = browser.find_element_by_xpath('//*[@id="comment"]')
    textarea.clear()
    textarea.click()
    textarea.send_keys(text)

    print 'Waiting till submit button slides down ...'
    sleep(1)

    print 'Submiting comment ...'
    browser.find_element_by_xpath('//*[@id="comment-submit"]').click()


def login(browser, user, password):
    print 'Logging in ...'
    browser.get('http://%s.wordpress.com/wp-login.php' % user)

    login = browser.find_element_by_xpath('//*[@id="user_login"]')
    login.clear()
    login.send_keys(user)
    pwd = browser.find_element_by_xpath('//*[@id="user_pass"]')
    pwd.clear()
    pwd.send_keys(password)
    browser.find_element_by_xpath('//*[@id="wp-submit"]').click()
    print 'Login form submitted'


if __name__ == '__main__':
    main()

Також мушу зауважити ще наступне. Firebug дуже допомагає при розробці, даючи нам xpath селектори потрібних елементів сторінки. Але, якщо ми наприклад працюємо з Ext.js, вона дає елементам дивні id на зразок DialogButton-1306-btnEl, де число змінюється випадковим чином. Тому треба писати не простий xpath, а хитро*зроблений:

    # ok = browser.xpath('//*[@id="DialogButton-1306-btnEl"]')
    ok = browser.xpath('//button[contains(., "OK")]')

P.S. Автоматизація це круто. Особливо автоматизація клацань мишкою… Хоча звісно буває не легко.


Filed under: Кодерство, Павутина Tagged: тестування, Python