如何定义一个全局方法,其变量可以在Python的其他方法中使用

问题描述 投票:0回答:1

我正在研究一个自动化项目。我正在自动登录页面。我正在处理的网站中的登录页面存在问题,即,即使凭据正确,它在我第一次登录时失败,然后如果我第二次登录则成功登录。所以,为了克服这一点,我已经尝试了除方法之外的尝试。代码:

driver=webdriver.Chrome("C:\\temp\\chromedriver.exe")
url = 'site-address'
driver.get(url)
driver.maximize_window()
wait = WebDriverWait(driver, 120)

class Demo
    def func1()
        user=driver.find_element_by_xpath("//")
        user.send_keys('Name')
        pas = driver.find_element_by_xpath("//")
        password.send_keys('pas')
        btn = driver .find_element_by_xpath("//")
        btn.click()

        try:
            chk=wait.until(EC.presence_of_element_located((By.ID, 'lop')))
            assert check.text == "Some Text"
            print('PAGE VERIFIED : ', check.text)
        except:
            print('LOGIN UN-SUCCESSFUL')
            print('Re-Trying...')
            user=driver.find_element_by_xpath("//")
            user.send_keys('Name')
            pas = driver.find_element_by_xpath("//")
            pas.send_keys('pas')
            btn = driver .find_element_by_xpath("//")
            btn.click()

所以,正如你所看到的那样,我正在重复输入用户名,密码和点击两次的过程,一次在开头,然后是在except块中的相同过程。我的问题是,如何创建一个方法,称之为setup(),以便我可以在setup()中初始化驱动程序,URL,用户名和密码。然后在func1()中调用该方法,然后在except块中调用。我是Python的新手,不熟悉如何返回值。

python selenium selenium-webdriver automation
1个回答
2
投票

Python类有一个名为__init__的构造函数,您可以使用它在创建此类对象时传递信息。这样的事情,即使逻辑分离不是最好的。但是给你一个构造函数的想法。

class Demo:

    def __init__(self, driver, url, username, password):
        """ Constructor of our demo class, set local variables"""
        self.driver = driver
        self.username = username
        self.password = password
        self.driver.get(url)
        self.driver.maximize_window()
        self.wait = WebDriverWait(self.driver, 120)

    def func1(self, attempt=1):
        """ Find elements in the opened page and send username and pasword,
        then clikc the button (submit?) """
        user = self.driver.find_element_by_xpath("//")
        user.send_keys(self.username)
        pas = driver.find_element_by_xpath("//")
        pas.send_keys(self.password)
        btn = driver .find_element_by_xpath("//")
        btn.click()

        try:
            # Wait for element
            chk = self.wait.until(EC.presence_of_element_located((By.ID, 'lop')))
            assert chk.text == "Some Text"
            print('PAGE VERIFIED : ', chk.text)
        except:
            # General exception ..
            if attempt >= 3: # Start with 1.. so 1, 2, 3.
                print("FAILED THREE TIMES, GIVING UP")
            else:
                print('LOGIN UN-SUCCESSFUL')
                print('Re-Trying...')
                self.func1(attempt + 1)


if __name__ == '__main__':
    driver = webdriver.Chrome("C:\\temp\\chromedriver.exe")
    url = 'site-address'
    TEST = Demo(driver=driver, url=url, username='Name', password='pas')
    TEST.func1()
© www.soinside.com 2019 - 2024. All rights reserved.