Привет!
Нужен простой пример, например для страницы логина.
Кто может дать пример, самый простой, но понятный как организовать тест и запустить. Проблема с передачей драйвера в базовый конструктор класса и дальше.
Если можно пример с использованием фикстур.
         
        
           1 лайк 
         
         
            
       
      
        
          
          
            rmerkushin  
          
              
                18.Октябрь.2017 06:46:05
               
              #2 
           
         
        
          Зачем вам вообще классы? Пишите просто функции. Сделайте инициализацию драйвера в фикстуре и просто передавайте ее в функции или маркайте функции на использование этой фикстуры. Лучше используйте yield fixture
conftest.py:
@pytest.yield_fixture(scope='module')
def chrome_driver_setup():
    driver = SeleniumWrapper().chrome_driver()
    yield driver
    driver.close()
test.py:
@pytest.mark.usefixtures('chrome_driver_setup')
def test()
    pass
В примере выше driver - синглтон.
         
        
           
         
            
       
      
        
        
          @rmerkushin 
Может тогда:
@pytest.yield_fixture(scope='module')
def chrome_driver():
    driver = SeleniumWrapper().chrome_driver()
    yield driver
    driver.close()
def test(chrome_driver):
    chrome_driver.do_some_stuff()
Чтобы показать, как пользоваться им 
         
        
           1 лайк 
         
         
            
       
      
        
          
          
            rmerkushin  
          
              
                18.Октябрь.2017 07:00:07
               
              #4 
           
         
        
          Можно и так, у меня просто был другой подход. Драйвер создавался в фикстуре, а на прямую в тестах он не использовался. По скольку он синглтон его легко можно было щупать прямо из page object в отдельном модуле. Ваше пример всеж лучше, у меня просто копипаста со старого кода )
З.Ы.: 6. Page Objects — Selenium Python Bindings 2 documentation  вот может и не самый лучший но пример Page Object, только натянуть нужно на fixture и pyttest )
З.З.Ы: вообще автору топика лучше поглядеть в сторону чего нибудь такого GitHub - actmd/elementium: jQuery-style syntactic sugar for highly reliable automated browser testing in Python  или selene. Думаю это будет лучше чем велосипедить Page Object
         
        
           1 лайк 
         
         
            
       
      
        
          
          
            Maxim1  
          
              
                19.Октябрь.2017 11:23:37
               
              #5 
           
         
        
          
Не согласен, без своего велосипеда он не разберется что ему лучше и понятнее
А вообще сложный вы пример ему дали, надо сначала разобраться как фикстура инита драйвера используется в стендовых фикстурах
@pytest.fixture()
def get_driver(request):
    browser = request.config.getoption('--browser')
    results_dir = path.join(getcwd(), 'results')
    if not path.exists(results_dir):
        makedirs(results_dir)
    log_path = path.join(results_dir, 'driver.log')
    drivers_dir = path.join(getcwd(), 'drivers')
    os_name = system().lower()
    os_arch = ''.join([s for s in architecture()[0] if s.isdigit()])
    os_type = os_name + os_arch
    driver = None
    driver_name = dict(
        firefox='geckodriver',
        chrome='chromedriver'
    )[browser]
    driver_path = path.join(drivers_dir, driver_name, os_type, driver_name)
    if os_name == 'windows':
        driver_path += '.exe'
    if browser == 'firefox':
        cap = webdriver.DesiredCapabilities().FIREFOX
        cap['marionette'] = False
        driver = webdriver.Firefox(executable_path=driver_path,
                                   log_path=log_path,
                                   capabilities=cap)
    elif browser == 'chrome':
        driver = webdriver.Chrome(executable_path=driver_path, service_log_path=log_path)
    print(popen(driver_path + ' --version').read())
    driver.maximize_window()
    def close_driver():
        driver.quit()
    request.addfinalizer(close_driver)
    return driver
@pytest.fixture()
def get_welcome_page(get_driver):
    from pages.welcome_page import WelcomePage
    page = WelcomePage(get_driver)
    page.navigate()
    return page
Это из фреймворка, там стенды (фикстуры) используют ранее написанные фикстуры. Все происходит по цепочке и без повторений кода