PO模式代码优化
- 新建一个PageLocators包,将元素定位分别写到对应的页面中,如loginpage_locators,封装成一个类,以元组的形式存储,如下:
1 from selenium.webdriver.common.by import By 2 3 class LoginPageLocator: 4 #元素定位 5 # 用户名输入框 6 user_text=(By.XPATH, "//input[@name='phone']") 7 # 密码输入框 8 pwd_text=(By.XPATH,"//input[@name='password']") 9 # 记住用户名勾选框 10 remember=(By.XPATH,"//input[@name='remember_me']") 11 # 登录按钮 12 login_btn=(By.XPATH,"//button[text()='登录']") 13 # 错误信息提示框----登录区域 14 errorMsg_form_loginArea=(By.XPATH,"//div[@class='form-error-info']") 15 #错误信息提示框-----中心区域 16 errorMsg_form_centerArea=(By.XPATH,"//div[@class='layui-layer-content']")
- 在login_page页面对象中引用LoginPageLocator类中的元素,如下:
1 from selenium.webdriver.support import expected_conditions as EC 2 from selenium.webdriver.support.wait import WebDriverWait 3 from selenium.webdriver.common.by import By 4 from PageLocators.loginpage_locators import LoginPageLocator as loc 5 class LoginPage: 6 def __init__(self,driver): 7 self.driver=driver 8 9 def login(self,username,pwd,remember_user=True): 10 # 等待定位元素出现 11 WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc.user_text)) 12 # 输入用户名 13 self.driver.find_element(*loc.user_text).send_keys(username) 14 # 输入密码 15 self.driver.find_element(*loc.pwd_text).send_keys(pwd) 16 # 定位记住手机号元素 17 remember_ele=self.driver.find_element(*loc.remember) 18 # 判断时候记住手机号 19 if remember_user==True: 20 remember_ele.checked=True 21 else: 22 remember_ele.checked=False 23 # 点击登录 24 self.driver.find_element(*loc.login_btn).click() 25 # 获取登录区域的错误提示信息 26 def get_errorMsg_form_loginArea(self): 27 WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc.errorMsg_form_loginArea)) 28 error_ele=self.driver.find_element(*loc.errorMsg_form_loginArea) 29 print(error_ele.text) 30 return error_ele.text 31 # 获取中心区域的错误信息 32 def get_errorMsg_form_centerArea(self): 33 WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc.errorMsg_form_centerArea)) 34 center_errorMsg_ele=self.driver.find_element(*loc.errorMsg_form_centerArea) 35 print(center_errorMsg_ele.text) 36 return center_errorMsg_ele.text
备注:*loc.login_btn表示将元组外面的括号取掉,将元组内的两个元素按顺序,放到对应的位置,俗称脱外套
- 运行main.py,如图:
-
分层设计中,调用模块:pageobjects调用pagelocators , testcases调用 pageobjects+testdatas