selenium +python之Page Obiect设计模式
Posted 木棉花的漂泊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium +python之Page Obiect设计模式相关的知识,希望对你有一定的参考价值。
PageObject是selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现对界面交互细节的封装,这样可以使测试案例更关注于业务而非界面细节,从而提高测试案例的可读性。
1.认识PageObject
PageObject设计模式的优点如下:
*减少代码的重复
*提高测试用例的可读性
*提高测试用例的可维护性,特别针对UI频繁变动的项目。
当为web页面编写测试是,需要操作该web页面上的元素。然而,如果在测试代码中直接操作HTML元素,代码是及其脆弱的,因为ui的变动性会很大。我们可以将page对象封装成一个HTML页面,然后通过提供应用程序特定的API来操作页面元素。而不是在HTML中来定位。
page对象的一个基本经验法则是:凡是人能够做的事,page对象通过软件客户端都能够做到。因此,他应该提供一个易于编程的接口并隐藏窗口底层的部件。所以访问一个文本框应该通过一个访问方法(accessor method)来实现字符串的获取与返回,复选框应当使用布尔值,按钮应当被表示为行为导向的方法名。page对象应当将在GUI控件上所有查询和操作数据的行为封装为方法
一个好的经验法则是:即使改变具体的控件,page对象的接口也不应当发生改变
尽管该术语是:“页面”对象,但是并不意味着需要针对每个页面建立一个这样的对象。例如:页面有重要意义的元素可以独立为一个page对象。经验法则的目的是通过给页面建模,时期对应用程序的使用者变得更有意义。
1 from selenium import webdriver 2 from selenium.webdriver.common.by import By 3 from time import sleep 4 5 6 class Page(object): 7 """ 8 基础类,用于页面对象类的继承 9 """ 10 login_url = ‘http://mail.163.com/‘ 11 12 def __init__(self, selenium_driver, base_url=login_url): 13 self.base_url = base_url 14 self.driver = selenium_driver 15 self.timeout = 30 16 17 def on_page(self): 18 return self.driver.current_url == (self.base_url + self.url) 19 20 def _open(self, url): 21 url = self.base_url + url 22 self.driver.get(url) 23 assert self.on_page(), ‘Did not land on %s‘ % url 24 25 def open(self): 26 self._open(self.url) 27 28 def find_element(self, *loc): 29 return self.driver.find_element(*loc) 30 31 32 class LoginPage(Page): 33 """ 34 126邮箱登陆页面模型 35 """ 36 url = ‘/‘ 37 # 定位器 38 username_loc = (By.ID, "idInput") 39 password_loc = (By.ID, "pwdInput") 40 submit_loc = (By.ID, "loginBtn") 41 42 # Action 43 def type_username(self, username): 44 self.find_element(*self.username_loc).send_keys(username) 45 46 def type_password(self, password): 47 self.find_element(*self.password_loc).send_keys(password) 48 49 def submit(self): 50 self.find_element(*self.submit_loc).click() 51 52 53 def test_user_login(driver, username, password): 54 """ 55 测试获取的用户名/密码是否可以登陆 56 """ 57 login_page = LoginPage(driver) 58 login_page.open() 59 login_page.type_username(username) 60 login_page.type_password(password) 61 login_page.submit() 62 63 64 def main(): 65 try: 66 driver = webdriver.Chrome() 67 username = ‘[email protected]‘ 68 password = ‘fyr19910915‘ 69 test_user_login(driver, username, password) 70 sleep(3) 71 text = driver.find_element_by_xpath("//span[@id = ‘spnUid‘]").text 72 assert (text == ‘[email protected]‘), "用户名称不匹配,登陆失败!" 73 finally: 74 # 关闭浏览器窗口 75 driver.close() 76 77 78 if __name__ == ‘__main__‘: 79 main()
以上是关于selenium +python之Page Obiect设计模式的主要内容,如果未能解决你的问题,请参考以下文章
python selenium-8 Page Object模式
python+selenium自动化软件测试(第7章):Page Object模式
python3+selenium框架设计01-Page Object