繁体   English   中英

Python + Selenium:页面对象模式:需要帮助找出为什么看不到属性

[英]Python + Selenium: Page object pattern: Need help to figure out why it doesn't see an attribute

我是 Python + Selenium 新手。 今天开始学习页面对象模式,遇到了这个错误:

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

我不知道为什么它扔了,因为登录表单定义

基页

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 = 'test@test.net'
     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)

变量emailpasswordloginform等是静态的。 要访问它们,请使用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 = 'test@test.net'
    self.password = 'test'
    self.loginform = (By.ID, 'email')
    self.passwordform = (By.ID, 'password')
    self.button = (By.XPATH, "//*[contains(text(), 'Log In')]")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM