2014-06-25 48 views
0

這裏調用方法是頁面對象文件:login.py不能在其他類

from pages.base import BasePage 
from config import secrets 
from selenium.webdriver.common.keys import Keys 

class LoginPage(BasePage): 

    def __init__(self): 
     self.webdriver = BasePage.webdriver 
     port = raw_input("Enter port number: ") 
     self.url = "http://localhost:" + port 

    @property 
    def retrieve_username_field(self): 
     self.webdriver.find_element_by_name("username") 

    @property 
    def retrieve_password_field(self): 
     self.webdriver.find_element_by_name("password") 

    def login(self, username=None, password=None): 
     username = username or secrets.username 
     password = password or secrets.password 
     self.retrieve_username_field.send_keys(username) 
     self.retrieve_password_field.send_keys(password) 
     self.retrieve_password_field.send_keys(Keys.RETURN) 

這是基礎頁面文件:base.py

from selenium import webdriver 

class BasePage(object): 
    webdriver = webdriver.Firefox() 

    def go(self): 
     self.webdriver.get(self.url) 

下面是測試文件:test_login的.py

import unittest 

from pages.login import LoginPage 

login_page = LoginPage() 

def setUpModule(): 
    login_page.go() 

def tearUpModule(): 
    login_page.logout() 


class TestLogin(unittest.TestCase): 

    def test_login_succeeds_with_valid_credentials(self): 
     login_page.login() 
     xpath = "//th[text() = 'Spool Name']" 
     self.assertIsNotNone(login_page.webdriver.find_element_by_xpath(xpath)) 



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

的問題是,我得到這個錯誤:http://puu.sh/9JgRd/e61f5acec3.png,我不知道爲什麼我不能調用登錄方法。我引用了LoginPage對象,但失敗恰好發生在這裏。

回答

2

你的問題不是你不能撥打login(),而是self.retrieve_username_field返回None,因此沒有send_keys方法。 這正是你得到的錯誤告訴你的。

+0

好的,但代碼出了什麼問題呢?我插入了打印語句,webdriver.current_url返回正確的URL。打印self.webdriver返回的對象不是無。該方法是正確的,因爲它會拋出不存在的方法錯誤。此外,輸入字段的名稱是正確的。我添加了隱式等待,但它不起作用,即使隱含的等待在屬性調用之前立即返回此錯誤。 – Contempt

+0

Omg ...忘了退貨:D – Contempt

+0

我已經習慣了在最後的陳述中不寫回報......那個Ruby的習慣.. – Contempt