Python Selen, как мне отделить функции с помощью селекторов CSS - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь разделить свой сценарий на разные функции (поэтому проще использовать части), однако, когда я делаю это, селен, похоже, не может найти селекторы css.

Структура папки:

  • Startup.py
  • Папка веб-драйвера
    • , содержащая init .py
    • и login.py

startup.py

from selenium import webdriver
from webtesting import login

def browser(usernamefield, passwordfield, loginbutton):
    print 'Starting up Firefox'
    browser = webdriver.Firefox()
    print 'browsing to websiteadress'
    browser.get('websiteadress')
    login.loginsteps(usernamefield, passwordfield, loginbutton)

usernamefield = '#login-username'
passwordfield = 'input.input-default:nth-child(5)'
loginbutton = '.button'

if __name__=='__main__':
    browser(usernamefield,passwordfield,loginbutton)

login.py

def loginsteps(usernamefield, passwordfield, loginbutton):
    try:
        userlogin = browser.find_element_by_css_selector(usernamefield)
        print 'found <%s> element with that class name!' % (userlogin)
    except:
        print 'Was not able to find an element <%s> with that name.' % (usernamefield)
    try:
        userpass = browser.find_element_by_css_selector(passwordfield)
        print 'found <%s> element with that class name!' % (userpass)
    except:
        print 'Was not able to find an element <%s> with that name.' % (passwordfield)
    try:
        logincss = browser.find_element_by_css_selector(loginbutton)
        print 'found <%s> element with that class name!' % (logincss)
        except:
            print 'Was not able to click login.'
    except:
        print 'Was not able to find login element.'

Теперь, если я запускаю это, браузер запускается, но я получаю исключения на CSSселекторы, поэтому невозможно правильно запустить вторую функцию в сеансе браузера.

печатает в терминале:

  • Запуск Firefox
  • просмотр веб-сайта адрес
  • Не удалось найти элемент <# login-username> с таким именем.
  • Не удалось найти элемент с таким именем.
  • Не удалось найти элемент входа в систему.

, однако, когда я тестирую запуск его в одной функции, он работает.

from selenium import webdriver

def browser(usernamefield, passwordfield, loginbutton):
    print 'Starting up Firefox'
    browser = webdriver.Firefox()
    print 'browsing to website'
    browser.get('webadress')
    #login.loginsteps(usernamefield, passwordfield, loginbutton)
    try:
        userlogin = browser.find_element_by_css_selector(usernamefield)
        print 'found usernamefield element with that class name!'
    except:
        print 'Was not able to find an element <%s> with that name.' % (usernamefield)
    try:
        userpass = browser.find_element_by_css_selector(passwordfield)
        print 'found userpass element with that class name!'
    except:
        print 'Was not able to find an element <%s> with that name.' % (passwordfield)
    try:
        logincss = browser.find_element_by_css_selector(loginbutton)
        print 'found loginbutton element with that class name!'
    except:
        print 'Was not able to find login element.'

usernamefield = '#login-username'
passwordfield = 'input.input-default:nth-child(5)'
loginbutton = '.button'

if __name__=='__main__':
    startup.browser(usernamefield,passwordfield,loginbutton)

это возвращает doeОднако в этом сенарио я не могу сделать отдельные функции из частей этого сценария, превращая все это в большой беспорядок.

  • Запуск Firefox
  • просмотр веб-сайта
  • найден элемент usernamefield с этим именем класса!
  • найден элемент userpass с этим именем класса!
  • найден элемент loginbutton с этим именем класса!

Как мне заставить Python Selen работать с отдельными функциями?как и в текущей настройке, мне пришлось бы копировать мой сценарий вместо возможности повторного использования кода ....

1 Ответ

0 голосов
/ 30 ноября 2018

решена проблема: переменная браузера должна быть возвращена и передана следующей функции

    from selenium import webdriver
    from webtesting import login

    def browser(usernamefield, passwordfield, loginbutton):
        print 'Starting up Firefox'
        browser = webdriver.Firefox()
        print 'browsing to websiteadress'
        browser.get('websiteadress')
        return browser

if __name__ == '__main__':
    browser = browser()
    loginsteps(browser,usernamefield, passwordfield, loginbutton)

, а затем передать браузер следующему сценарию, чтобы он мог выбрать правильный сеанс браузера.

def loginsteps(browser, usernamefield, passwordfield, loginbutton):
    try:
        userlogin = browser.find_element_by_css_selector(usernamefield)
        print 'found <%s> element with that class name!' % (userlogin)
    except:
        print 'Was not able to find an element <%s> with that name.' % (usernamefield)
    try:
        userpass = browser.find_element_by_css_selector(passwordfield)
        print 'found <%s> element with that class name!' % (userpass)
    except:
        print 'Was not able to find an element <%s> with that name.' % (passwordfield)
    try:
        logincss = browser.find_element_by_css_selector(loginbutton)
        print 'found <%s> element with that class name!' % (logincss)
        except:
            print 'Was not able to click login.'
    except:
        print 'Was not able to find login element.'
...