web自动化测试中的PO模式(二)---将元素定位分离出来

PO模式代码优化

  1. 新建一个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']")
  2. 在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表示将元组外面的括号取掉,将元组内的两个元素按顺序,放到对应的位置,俗称脱外套

  3. 运行main.py,如图:
  4. 分层设计中,调用模块:pageobjects调用pagelocators ,  testcases调用 pageobjects+testdatas

     

原文地址:https://www.cnblogs.com/wsk1988/p/12720869.html