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()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.