如何定义其变量可用于Python中其他方法的全局方法
我在做一个自动化项目。我正在自动登录页面。我正在使用的网站中的登录页面存在问题,即,即使凭据正确,第一次登录时也会失败,如果第二次登录,则会成功登录。所以,为了克服这个问题,我加入了一个尝试,除了方法。守则:如何定义其变量可用于Python中其他方法的全局方法,python,selenium,selenium-webdriver,automation,Python,Selenium,Selenium Webdriver,Automation,我在做一个自动化项目。我正在自动登录页面。我正在使用的网站中的登录页面存在问题,即,即使凭据正确,第一次登录时也会失败,如果第二次登录,则会成功登录。所以,为了克服这个问题,我加入了一个尝试,除了方法。守则: driver=webdriver.Chrome("C:\\temp\\chromedriver.exe") url = 'site-address' driver.get(url) driver.maximize_window() wait = WebDriverWait(driver,
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类有一个名为
\uuuu init\uuuu
的构造函数,您可以在创建此类对象时使用该构造函数将信息传递给它。像这样,即使逻辑的分离不是最好的。但是给你一个构造器的概念
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()
Python类有一个名为
\uuuu init\uuu
的构造函数,在创建此类的对象时,可以使用该构造函数将信息传递给它。像这样,即使逻辑的分离不是最好的。但是给你一个构造器的概念
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()