2017-02-20 13 views
0

Я новичок python + selenium. Сегодня начал изучать шаблон страницы объекта и столкнулись с этой ошибки: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 

ИДК, почему он бросает это вызывает LoginForm является определено

Base Страница:

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

Переменные email, password, 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

ТНХ, @Guy Это помогло. Но я столкнулся с новой проблемой: «Traceback (последний последний звонок): Файл« logintest.py », строка 13, в test_login login_page.login() Файл« D: \ Tests \ page object pattern \ loginpage. py ", строка 20, в логине BasePage.fill_the_form (LoginPage.loginform, LoginPage.email) ТипError: fill_the_form() отсутствует 1 обязательный позиционный аргумент: 'value'' –

+0

@RomanMakowski Попробуйте' super (LoginPage, self) .fill_the_form (LoginPage.loginform, LoginPage.email) ' – Guy

+0

Теперь отслеживающий еще больше: Traceback (самый последний вызов последнего): Файл "logintest.py", строка 13, в test_login login_page.login() файла«D : \ Tests \ page object pattern \ loginpage.py ", строка 20 , in login super (LoginPage, self) .fill_the_form (LoginPage.loginform, LoginPage.email) Файл «D: \ Tests \ page object pattern \ base.py», строка 14, в fill_the_form form = self.driver. find_element (локатор) ** некоторые вещи селена ** selenium.common.exceptions.WebDriverException: Сообщение: Cound не конвертировать стратегию в строку –