0
votes

I have a problem, I have in one file 2 tests, and want to run them just with the one login.

from selenium.webdriver.common.by import By
from methods.is_present import is_element_present, is_element_present_n
from methods.users import add_new_user, delete_added_user
from methods.login import login
from methods.users import modify_user
from methods.users import modified_user

def test_new_user(driver, name='Adelia Foxy', username='zared114'):
   login(driver, username="Admin", password="Password")
   # add new user
   add_new_user(driver,name, username)
   #check if the new user added
   assert is_element_present_n(driver, By.LINK_TEXT, "%s" % username)
   # delete added user
   delete_added_user(driver, name, username)
   #check if user deleted
   assert not is_element_present(driver, By.LINK_TEXT, "%s" % username)


def test_modify_user(driver, name='Adelia Foxy', username='New Username11'):
   login(driver, username="Admin", password="Password")
   #modifying user information
   modify_user(driver, name, username)
   #check is user modified
   modified_user(driver, name, username)

I have separate file with login function:

def login(driver, username, password):
    driver.get("http://hrm.seleniumminutes.com/")
    driver.find_element_by_css_selector("[name=txtUsername]").send_keys(username)
    driver.find_element_by_css_selector("[name=txtPassword]").send_keys(password)
    driver.find_element_by_css_selector("[name=Submit]").click()
    driver.find_element_by_css_selector("[id=menu_admin_viewAdminModule]").click()

And also I have separate file "conftest.py" with pytest fixture:

import pytest
from selenium import webdriver

@pytest.fixture(scope='session')
def driver(request):
    wd = webdriver.Chrome()
    wd.implicitly_wait(2)
    request.addfinalizer(wd.quit)
    return wd

I'm trying to put "login" method inside my fixture

import pytest
from selenium import webdriver
from methods.login import login

@pytest.fixture(scope='session')
def driver(request):
   wd = webdriver.Chrome()
   wd.implicitly_wait(2)
   login(driver, username="Admin", password="Password")
   request.addfinalizer(wd.quit)
   return wd

Something like above, but i'm getting AttributeError: 'function' object has no attribute 'get'

Who knows how to solve this, or maybe someone knows better way to run few tests with just one login, thanks

https://github.com/harmatii/hrm

below my error message request = <SubRequest 'driver' for <Function 'test_new_user'>> @pytest.fixture(scope='session') def driver(request): wd = webdriver.Chrome() login(driver, username="Admin", password="Password")

1
Please, when posting error message, remember to post the stack trace. - Shadow

1 Answers

1
votes

There are better ways but in your case, you are passing driver as first argument to login in the fixture but it should be wd. Try with

login(wd, username="Admin", password="Password")