2015-04-19 26 views
0

我已經閱讀了一些關於Python Selenium Webdriver Page Object模型的教程,因爲我必須使用Selenium和Python自動化gui測試。Python WebDriver AttributeError:LoginPage實例沒有屬性「驅動程序」

首先我想寫一個Login Page類和一個LoginMainTest類。我在運行代碼時遇到以下錯誤。

AttributeError的:LoginPage實例沒有屬性「司機」

我想我必須指定硒司機在那裏我實例化LoginPage 例如在這一行log_in = LoginPage.LoginPage()

我需要一些幫助。

完整的錯誤:

Traceback (most recent call last): 
File "E:\Python projects\unitTest_sample - Modifying into Page Object\LoginMainTest.py", line 11, in test_valid_login 
log_in = LoginPage.LoginPage() 
File "E:\unitTest_sample - Modifying into Page Object\LoginPage.py", line 20, in __init__ 
emailFieldElement = self.driver.find_element_by_id(self.emailFieldID) 
AttributeError: LoginPage instance has no attribute 'driver' 

我LoginMainTest.py類如下:

import LoginPage 
import unittest 

class GoogleTest(unittest.TestCase): 

    def test_valid_login(self): 
    log_in = LoginPage.LoginPage() 
    log_in.userLogin_valid() 

if __name__ == '__main__': 
unittest.main() 

我Login.py類如下:

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 

class LoginPage(): 

Username   = "test1" 
password   = "Test" 
emailFieldID  = "email" 
passFieldID   = "pass" 
loginButtonXpath = "//input[@value='log in']" 
logo_xpath   = "//a[contains(@href, 'logo')])[1]" 

def setup(self): 
    self.driver = webdriver.Firefox() 
    self.driver.get("http://www.testaaa.com") 

def __init__(self): 
    emailFieldElement = self.driver.find_element_by_id(self.emailFieldID) 
    passFieldElement = self.driver. find_element_by_id(self.passFieldID) 
    loginFieldElement = self.driver.find_element_by_xpath(self.loginButtonXpath) 

def userLogin_valid(self): 
    self.emailFieldElement.clear() 
    self.emailFieldElement.send_keys(self.Username) 
    self.passFieldElement.clear() 
    self.send_keys(self.password) 
    self.loginFieldElement.click() 

def tearDown(self): 
    self.driver.quit() 

回答

1

首先,有您的設計中存在一個缺陷。

你的腳本失敗,因爲當你創建登錄頁面的對象初始化被調用,但沒有找到,因爲它是在設置FN定義(這是永遠不會被調用)

司機的原因理想情況下,在頁面對象模型中,您應該在測試文件中初始化瀏覽器(驅動程序),然後在創建任何頁面文件的對象時,應該傳遞該驅動程序。

你的設置應該是這個樣子,

頁文件:

# setup() fn not needed here 
. 
. 
def __init__(self, driver): 
    self.driver = driver 
    emailFieldElement = self.driver.find_element_by_id(self.emailFieldID) 
    passFieldElement = self.driver. find_element_by_id(self.passFieldID) 
    loginFieldElement = self.driver.find_element_by_xpath(self.loginButtonXpath) 
. 
# teardown() not needed here, should be in test file 
. 

測試文件:

. 
. 
    class GoogleTest(unittest.TestCase): 

     def test_valid_login(self): 
     self.driver = webdriver.Firefox() # the first 2 stmts can be in a setupclass 
     self.driver.get("http://www.testaaa.com") 
     log_in = LoginPage.LoginPage(self.driver) 
     log_in.userLogin_valid() 
. 
. 
+0

非常感謝。 –

相關問題