2017-02-20 15 views
0

我是一個Python +硒新手。 今天開始學習網頁對象模式,面對這樣的錯誤:Python +硒:頁面對象模式:需要幫助弄清楚爲什麼它看不到屬性

Traceback (most recent call last): 
File "logintest.py", line 17, in test_login 
login_page.login() 
File "D:\Tests\page object pattern\loginpage.py", line 19, in login 
BasePage.fill_the_form(loginform, email) 
NameError: name 'loginform' is not defined 

IDK爲什麼它拋出它導致登錄表單是定義

基頁:

from abc import abstractmethod 
from selenium import webdriver 

class BasePage(object): 

    def __init__(self, driver): 
    self.driver = driver 

    @abstractmethod 
    def _validate_page(self, driver): 
     return 

    def fill_the_form(self, locator, value): 
     form = self.driver.find_element(locator) 
     self.form.clear() 
     self.form.send_keys(value) 

    def go_to(self, locator): 
     self.driver.find_element(locator) 
     self.driver.click() 

登錄頁面:

from base import BasePage 
from homepage import HomePage 
from selenium.webdriver.common.by import By 
class LoginPage(BasePage): 

    email = '[email protected]' 
    password = 'test' 
    loginform = (By.ID, 'email') 
    passwordform = (By.ID, 'password') 
    button = (By.XPATH, "//*[contains(text(), 'Log In')]") 

    def __init__(self, driver): 
     super(LoginPage, self).__init__(driver) 


    def _validate_page(self, driver): 
     assert 'Login' in driver.title() 

    def login(self): 
     BasePage.fill_the_form(loginform, email) 
     BasePage.fill_the_form(passwordform, password) 
     BasePage.go_to(button) 

基礎測試:

from selenium import webdriver 
import unittest 
class BaseTest(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Firefox() 
     self.driver.implicitly_wait(10) 
     self.driver.get('https://testtest.com/') 
    def tearDown(self): 
     self.driver.quit() 

最後我的測試:

import unittest 
from basetest import BaseTest 
from base import BasePage 
from loginpage import LoginPage 

class logintest(BaseTest): 

     def test_login(self): 

      login_page = LoginPage(self.driver) 
      login_page.login() 


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

而且也許有人想找個學生來教硒+蟒蛇?

回答

0

變量emailpassword,loginform等都是靜態的。訪問它們使用LoginPage.loginform

def login(self): 
    BasePage.fill_the_form(LoginPage.loginform, LoginPage.email) 
    BasePage.fill_the_form(LoginPage.passwordform, LoginPage.password) 
    BasePage.go_to(LoginPage.button) 

或者宣佈在__init__

def __init__(self, driver): 
    super(LoginPage, self).__init__(driver) 
    self.email = '[email protected]' 
    self.password = 'test' 
    self.loginform = (By.ID, 'email') 
    self.passwordform = (By.ID, 'password') 
    self.button = (By.XPATH, "//*[contains(text(), 'Log In')]") 
+0

THX,@Guy它幫助。但我遇到了一個新問題: 'Traceback(最近調用最後一個): 文件「logintest.py」,第13行,在test_login中 login_page.login() 文件「D:\ Tests \ page object pattern \ loginpage。 python「,第20行,登錄 BasePage.fill_the_form(LoginPage.loginform,LoginPage.email) TypeError:fill_the_form()missing 1 required required argument:'value'' –

+0

@RomanMakowski嘗試'超級(LoginPage,self).fill_the_form (LoginPage.loginform,LoginPage.email)' – Guy

+0

現在回溯是更大: 回溯(最近通話最後一個): 文件 「logintest.py」,13號線,在test_login login_page.login() 文件「d :\ Tests \ page object pattern \ loginpage.py「,第20行,登錄 super(LoginPage,self).fill_the_form(LoginPage.loginform,LoginPage.email) fill_the_form form = self.driver文件「D:\ Tests \ page object pattern \ base.py」,第14行。 find_element(locator) ** some selenium stuff ** selenium.common.exceptions.WebDriverException:消息:Cound不會將策略轉換爲字符串 –

相關問題