1

I have a page object class for login page where i have created a method.

from Resources.Locators import Locators
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class LoginPage:

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

    def user_login(self, username, password):
        self.driver.find_element(*Locators.username).send_keys(username)
        self.driver.find_element(*Locators.password).send_keys(password)
        self.driver.find_element(*Locators.login_button).click()
        try:
            element = WebDriverWait(self.driver, 60).until(
                EC.presence_of_element_located((Locators.invalid_error)))
            if element:
                error_message = element.text
                return error_message
        except:
            self.driver.find_element(*Locators.otp).send_keys("1234")
            self.driver.find_element(*Locators.otp_verify_button).click()

Below is the test case file where I need to use error_message value.

from selenium import webdriver
import unittest
from Pages.Login import LoginPage
from Resources.Test_Data import TestData
from Resources import Test_Data

class TestLogin(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.get(TestData.base_url)
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

    def test_01_login_invalid(self):
        driver = self.driver
        login = LoginPage(driver)
        login.user_login("User123", "Password123")
        print(login.error_message)

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

if __name__ == '__main__':
    unittest.main()
I receive the error as follow:
print(login.error_message)
AttributeError: 'LoginPage' object has no attribute 'error_message'

I want to use the error_message value from above first class for some validation. How do i do this?

1 Answer 1

1

In your code error_message is just a local variable which is returned by user_login function. If you want to access it you need to make it as a self attribute.

Example :

from Resources.Locators import Locators
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


class LoginPage:

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

    def user_login(self, username, password):
        self.driver.find_element(*Locators.username).send_keys(username)
        self.driver.find_element(*Locators.password).send_keys(password)
        self.driver.find_element(*Locators.login_button).click()
        try:
            element = WebDriverWait(self.driver, 60).until(
                EC.presence_of_element_located((Locators.invalid_error)))
            if element:
                self.error_message = element.text
                return self.error_message
        except:
            self.driver.find_element(*Locators.otp).send_keys("1234")
            self.driver.find_element(*Locators.otp_verify_button).click()
0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.