2017-07-24 15 views
0

我有一個問題,我在一個文件中有2個測試,並且只想用一次登錄就運行它們。如何把「登錄」方法放在pytest夾具中

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) 

我有登錄功能單獨的文件:

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() 

而且我也有單獨的文件 「conftest.py」 與pytest夾具:

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 

我試圖把我的夾具裏面的「登錄」方法

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 

喜歡的東西上面,但我越來越AttributeError: 'function' object has no attribute 'get'

誰知道如何解決這個問題,也許有人知道更好的方式來運行只有一個登錄一些測試,感謝

https://github.com/harmatii/hrm

下面我的錯誤消息 request = <SubRequest 'driver' for <Function 'test_new_user'>> @pytest.fixture(scope='session') def driver(request): wd = webdriver.Chrome() login(driver, username="Admin", password="Password")

+0

請在發佈錯誤消息時記得發佈堆棧跟蹤。 – Shadow

回答

1

有更好的方法,但在你的情況,你是路過driver作爲第一個參數在夾具登錄,但它應該是wd。嘗試使用

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

它的工作原理,謝謝你,你寫了'有更好的方法'我可以嗎?謝謝 –

+0

嗯例如你可以pytest-selenium插件和頁面對象。 – Amit