简体   繁体   中英

How to pass dict value into class as argument

I have below page object want to simplify it:

from selenium.webdriver.common.by import By

from support.utlis import DriverUtil

class LoginPage:

    def __init__(self):
        self.driver = DriverUtil.get_driver()

    def username_input_field(self):
        return self.driver.find_element(By.CSS_SELECTOR, 'input[name="txtUsername"]')

    def password_input_field(self):
        return self.driver.find_element(By.CSS_SELECTOR, 'input[name="txtPassword"]')

    def login_button(self):
        return self.driver.find_element(By.CSS_SELECTOR, 'input[value="Login"]')

I want to have a single elementMap dict variable which can pass into class. Is that possible? Like below code. I tried pass it as self.elements_map = elementsMap. Not working.

from selenium.webdriver.common.by import By

from support.utlis import DriverUtil

elementsMap = {
    'usernameInputField': 'input[name="txtUsername"]',
    'passwordInputField': 'input[name="txtPassword"]',
    'login_button': 'input[value="Login"]'
}

class LoginPage:

    def __init__(self):
        self.driver = DriverUtil.get_driver()
        self.elements_map = elementsMap

    def username_input_field(self):
        return self.driver.find_element(By.CSS_SELECTOR, self.elements_map[usernameInputField])

    def password_input_field(self):
        return self.driver.find_element(By.CSS_SELECTOR, self.elements_map[passwordInputField])

    def login_button(self):
        return self.driver.find_element(By.CSS_SELECTOR, self.elements_map[login_button])

I cannot find a way to pass the dict key/value pair into class. Need some help. Thanks!

You need to provide the dict key as a string in your field getter functions:

from selenium.webdriver.common.by import By

from support.utlis import DriverUtil

elementsMap = {
    'usernameInputField': 'input[name="txtUsername"]',
    'passwordInputField': 'input[name="txtPassword"]',
    'login_button': 'input[value="Login"]'
}

class LoginPage:

    def __init__(self):
        self.driver = DriverUtil.get_driver()
        self.elements_map = elementsMap

    def username_input_field(self):
        return self.driver.find_element(By.CSS_SELECTOR, self.elements_map['usernameInputField'])

    def password_input_field(self):
        return self.driver.find_element(By.CSS_SELECTOR, self.elements_map['passwordInputField'])

    def login_button(self):
        return self.driver.find_element(By.CSS_SELECTOR, self.elements_map['login_button'])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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