码迷,mamicode.com
首页 > 编程语言 > 详细

selenium +python之Page Obiect设计模式

时间:2017-11-19 13:31:20      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:mon   应用程序   close   改变   频繁   html元素   .com   程序   重要   

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 = fengyiru6369@163.com
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 == fengyiru6369@163.com), "用户名称不匹配,登陆失败!"
73     finally:
74         # 关闭浏览器窗口
75         driver.close()
76 
77 
78 if __name__ == __main__:
79     main()

 

selenium +python之Page Obiect设计模式

标签:mon   应用程序   close   改变   频繁   html元素   .com   程序   重要   

原文地址:http://www.cnblogs.com/fengyiru6369/p/7859500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!