python_PageObject

一。PageObject

 1.定义:

是指UI界面上用于与用户进行交互的对象。它可以指整个页面,也可以指Page上的某个区域,是Selenium自动化测试项目开发实践的最佳设计模式之一。

- PageObject 页面对象。 会把某个网页(app页面)页面封装成对象。 
- 对象
  - 属性。 元素定位器, URL , 标题, (DOM)
  - 方法。 元素定位,点击,(做了某个动作,执行了某步操作)

2.PageObject 原则

1)页面动作:使用到什么行为就封装什么行为。

2)封装的页面操作的返回值

  -一般返回self,或者其他的页面对象

  -如果需要获取某个元素或者属性,直接返回元素本身或者属性。

  -如果一个操作可能有多个结果,根据结果封装成多个方法。

3.Pageobject优势

1)可维护性强。(页面的属性和方法分开写后,页面标签改变只需要修改元素值就成)

2)可读性强。(PO模式封装的函数名或者类名本身就是以具体操作命名的)

3)扩展性强。(有新功能需要实现时,po模式层级清晰新增更加方便)

4)可复用性强。(已经写过的方法可以重复使用)

5)页面操作和页面操作分离。

 

二。使用pageobject模式设计用例

1.用例编写

1)初始化页面

2)调用页面逻辑操作,目的是获取实际结果

3)结果

 

 

 

2.数据分组

使用parametrize做数据驱动用法:

@pyetst.mark.parametrize("这里自定义调用名称",“这里是需要数据驱动的数据”)

1)分组的依据:测试步骤的不一致

2)保存用例,不要通过excel去管理(pytest数据驱动模式引起的,后面详细解释)

3)用例保存:1.使用py文件;2.使用yaml文件

示例:这里我使用的是列表中嵌套字典保存数据,这里最好是使用元组进行管理数据,原因后续补充

 

 

 

3.locator分层 

1)By -- 定位尽量使用 By 方式去定位 (find_element(By.CLASS_NAME,value))

1.使用方法:

#定位方法与对应的value

ele=(By.CLASS_NAME,"su")

find_element(*ele)

好处:

1.直接调用源码中的方法,避免转换的错误。

源码:

 

 

 2。不使用By

方法:

#定位方法与value

ele={"by":"class name","value":"su"}

#调用

find_element(**ele)

缺陷:

1.需要注意类似于class_name的by值,中间需要空格才能转换成功 直接使用方法一比较直接不容易出错误

 

2)遇到tost提示时,不好定位使用断点的方式进行操作这样tost消息就不会消失了

 

 

 

3)web 自动化测试用例实现的流程

- 1, 准备前置后置, conftest
- 2, 编写测试步骤:测试用例的函数注解, docstring
- 3, 根据测试步骤封装页面行为。
- 4, 调用页面行为,获取实际结果
- 5, 断言

 

4)等待

显示等待的封装

与隐性等待(implicitly_wait(time))的区别:

1.隐性等待等待的是元素的加载

2.显示等待等待的是动态文本(也就是看的到的:比如text文本)

封装方法

#locator 是定位元素的方法与value

def wait_element_visible(self, locator, timeout=20, poll=0.5):
  """等待某个元素可见"""
  el = WebDriverWait(self.driver, timeout=timeout, poll_frequency=poll).until(
  expected_conditions.visibility_of_element_located(locator)
  )
return el

 

5)截图 --未完待续

posted @ 2020-08-02 22:58  1142783691  阅读(588)  评论(0编辑  收藏  举报