首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不懂PO 设计模式?这篇实战文带你搞定 PO

为UI页面写测试用例时(比如web页面,移动端页面),测试用例会存在大量元素和操作细节。当UI变化时,测试用例也要跟着变化, PageObject 很好的解决了这个问题!...使用UI自动化测试工具时(包括selenium,appium等),如果无统一模式进行规范,随着用例的增多会变得难以维护,而 PageObject 让自动化脚本井井有序,将 page 单独维护并封装细节,...page object应该封装对数据的操作细节,比如查找元素和点击元素。当页面元素改动时,应该只改变page类中的内容,不需要改变调用它的地方。...内的元素有多少并不关⼼,隐藏内部界⾯控件 • 登录成功和失败会分别返回不同的页⾯ – findPassword – loginSuccess – loginFail • 通过⽅法返回值判断登录是否符合预期...register方法实现了正确的表格填写,当填写完毕时返回自身(页面还停留在注册页)。

91710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Web 自动化:一种基于 Page Object 的实现及常见异常处理

    使得测试人员在编写用例时能更多的关注业务逻辑,而不是页面结构与元素。 举个简单的例子,假设待测产品包含两个页面:登录页、个人中心。需要编写一个测试用例,实现用户登录并且点击签到按钮的过程。...; 2、同一个元素的定位器不会出现在多个用例中,元素变更时只需要修改元素所在页面类; 3、登录的方法可以复用于多个用例中,如果产品登录流程发生变动,只需要修改登录页登录方法的实现。...1、查找元素时遇到NoSuchElementException 出现此问题一般是因为Selenium的查找操作在元素加载之前就已经结束。...因为此时ID=1的元素已经不在页面上了,所以程序出错。...3)如果元素查找和获取元素文本都发生在DOM刷新之后,程序获取到最新值,检查通过。 4)如果DOM刷新超时,Assert不通过。 这样当DOM刷新后,测试程序马上获取到更新后的文本。

    2.5K00

    自动化测试实战 | 搞定 PageObject 设计模式

    PageObject 简介 在为 UI 页面写测试用例时(比如 Web 页面,移动端页面),测试用例会存在大量元素和操作细节。如何面对当 UI 变化时,测试用例也要跟着变化这个问题?...使用 UI 自动化测试工具时(Selenium、Appium 等),如果无统一模式进行规范,随着用例的增多会变得难以维护,而 PageObject 让自动化脚本井井有序,将 page 单独维护并封装细节...Page Object 应该封装对数据的操作细节,比如查找元素和点击元素。当页面元素改动时,应该只改变 Page 类中的内容,不需要改变调用它的地方。...在代码中创建对应的三个类Inde,Login,Register: 登陆页⾯提供 login findPassword 功能 Login类 + login findPassword⽅法 登录页⾯内的元素有多少并不关...register 方法实现了正确的表格填写,当填写完毕时返回自身(页面还停留在注册页)。

    1.6K30

    python selenium系列(五)

    在selenium系列的前四节,主要讲解selenium核心的元素定位和操作技术,然而,如果自动化脚本缺少断言,就无法准确获得脚本的运行过程中是否存在非预期的情况,脚本本身就不能很好完成功能回归的使命。...以下主要介绍Selenium断言中的两个模式:assert 、verify。 assert :断言失败时,测试终止。 Verify :断言失败时,测试会继续执行,但会将错误信息写入日志。...其实,选择使用assert还是Verify,取决于当执行失败时,希望脚本如何处理。...如果希望测试失败时用例停止执行,方便检查错误原因,使用assert;如果希望测试出现异常时仍然可以对后续内容进行检验,使用verify。...一个有用的思路是: 我们使用一个"assert"保证操作在正确的页面上,然后跟着一堆的"verify"来验证页面元素、表单中的值,标签等。

    1.4K10

    解读selenium webdriver

    WebDriver对测试本身一窍不通:它不知道如何比较事物、断言通过或失败,当然也不知道测试报告或Given/When/Then语法。...通过隐式等待,WebDriver在试图找到任何元素时,会在一定时间内轮询DOM。当网页上的某些元素不是立即可用,需要一些时间来加载时,这很有用。...用户可以配置等待以在等待时忽略特定类型的异常,例如在页面上搜索元素时忽略NoSuchElementException。...默认情况下,当Selenium WebDriver加载页面时,它遵循正常的网页加载策略。当页面加载耗费大量时间时,总是建议停止下载额外的资源(如图片、css、js)。...当设置为eager时,Selenium WebDriver会等待DOMContentLoaded事件的返回。

    6.7K30

    20行代码,用Python实现异常测试用例

    PO模式的目的就是把页面的元素定位和元素操作跟测试用例分开。 分离彻底的目的就是各自维护各自的,各不相干。不至于元素定位一发生变化,就在测试用例中到处去找。...有些用例中的断言肯定是不止一条的,可能涉及的元素定位有1个以上。每一个测试用例都有元素的断言,也就意味着每条用例中都可能有元素定位方式。...从登陆页跳转过来,没有那么快出现,所以加上10秒时间缓冲。 步骤是一样的,断言的方式都是一样的,只是参数不一样而已,那你就可以用ddt。...所以元素之前该写等待的地方还是要等。主要提高自己代码的稳定性。 测试用例=测试对象调用+测试数据 2.同一套代码在Mac和Windows上运行有差异吗?...跨平台,如果都是谷歌浏览器,本质上都是一样的,但是电脑的环境不一样可能会导致某些地方运行失败。大部分东西都是一样的,不需要去改,只要先去运行一下,有没有失败的,失败的原因是什么,分析下原因就行了。

    55810

    Selenium自动化测试技巧

    例如,当您不想在开发人员和测试人员不了解的情况下更改代码时,请使用Class和ID定位器。另一方面,当其他团队进行测试时,可以使用链接文本来动态处理情况。最后,可以采用XPath可用于定位。...例如,在连续Linux构建过程中执行集成测试时,将收到RemoteDriver。...页面上的不同元素将成为变量。用户交互被用具体的方法实现。 网页=类别 页面上的各种元素=变量 用户互动=方法 PageObject的优点 通过较小的UI调整,它有助于建立一个健壮的框架。...隐式–指示WebDriver轮询DOM,直到完成对元素的搜索为止。默认情况下,时间设置为0。 sleep Thread.sleep()无论工作页是否准备就绪,都会在括号内指定的秒数内等待。...如果在启动浏览器时同时打开一个新的firebug选项卡使您感到烦恼,请按照以下提供的提示之一关闭firebug起始页。 在showFirstRunPage标志中将False设置,如下。

    1.6K20

    Selenium——控制你的浏览器帮你爬虫

    问题:获取当前页好办,怎么获取接下来页面的内容? 带着这个思考,Selenium神器走入了我的视线。 预备知识 Selenium简介 Selenium是什么?一句话,自动化测试工具。...Selenium,我们用Chorme浏览器来测试。...另外需要多说一句的是,当xpath的路径以/开头时,表示让Xpath解析引擎从文档的根节点开始解析。当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。...而当/出现在xpath路径中时,则表示寻找父节点的直接子节点,当//出现在xpath路径中时,表示寻找父节点下任意符合条件的子节点,不管嵌套了多少层级(这些下面都有例子,大家可以参照来试验)。...然后找到下一页元素的位置,然后根据下一页元素的位置,触发鼠标左键单击事件。 我们审查元素看一下,这两个元素: ? ?

    2.2K20

    就是这么简单,Selenium StaleElementReferenceException 异常分析与解决

    简介Selenium 是一个流行的自动化测试工具,用于模拟用户与网页交互。...这个异常通常在我们尝试与网页上的元素交互时抛出,可能会导致我们的自动化测试脚本运行失败。本文将深入探讨 StaleElementReferenceException 异常的原因以及如何解决它。...StaleElementReferenceException 是 Selenium 中的一个异常类,用于表示当尝试与一个元素交互时,该元素已经不再附加到 DOM(文档对象模型)中的情况。...简而言之,该元素已经变得“陈旧”(stale),无法再直接访问。这通常发生在以下情况下:当页面上的元素在我们访问它之前已经被修改或重新加载。...异步更新: 当页面使用异步 JavaScript 更新内容时,元素可能会变得陈旧,因为页面 DOM 结构已经发生了变化。

    1.1K10

    Python3网络爬虫(九):使用Selenium爬取百度文库word文章

    至少我当时是这么想的,但是当把文章翻到最下方的时候,我看到了如下内容: ?     呃….需要点击“继续阅读”才能显示后续的内容,我单爬这一页内容,是爬不到后续的内容的。...3 预备知识 3.1 Selenium 3.1.1 简介     Selenium 是什么?一句话,自动化测试工具。...3.1.3.1 小试牛刀     我们先来一个小例子感受一下 Selenium,这里我们用 Chrome 浏览器来测试。...另外需要多说一句的是,当xpath的路径以/开头时,表示让Xpath解析引擎从文档的根节点开始解析。当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。...而当/出现在xpath路径中时,则表示寻找父节点的直接子节点,当//出现在xpath路径中时,表示寻找父节点下任意符合条件的子节点,不管嵌套了多少层级(这些下面都有例子,大家可以参照来试验)。

    3.4K61

    如何维护自动化测试

    在本文中讨论维持Selenium自动化测试的最佳实践方法。 需要维护的测试类型 测试维护包括两大类过程。首先是当已经进行的测试可能开始失败时。另一类是依赖性的变化。让我们分别看一下这两种情况。...测试失败时 测试失败的第一反应是什么?首先,确定故障背后的原因。有时软件中可能存在BUG,其他原因可能是程序稳定性、环境稳定性和行为改变等。在这种情况下,修复代码或更新测试会解决这些问题。...当项目更改基础依赖的内容时,需要对这些工具的某些元素涉及到测试用例以及基础组件进行更改。如果需要更新工具基础结构,则此类测试自动化维护还包括对工具进行培训的开发人员。...自动化测试维护的问题 当谈论web端测试自动化时,第一个想到的就是Selenium自动化测试。毫不夸张地说,Selenium自动化测试统治着web端测试自动化领域。...运行测试脚本时,可以在页面上找到此选择器。但是随着UI的发展和变化,页面元素可能发生变化。为了防止测试失败,更新这些测试用例很重要。 Selenium自动化测试维护是一个持续的需求。

    90230

    如何使用Selenium WebDriver查找错误的链接?

    当您在网站上遇到404 /页面未找到/无效超链接时,会想到什么想法?啊!当您遇到损坏的超链接时,您会感到烦恼,这是为什么您应继续专注于消除Web产品(或网站)中损坏的链接的唯一原因。...您可以使用Selenium WebDriver来利用自动化进行錯誤的链接测试,而无需进行人工检查。 ? 当特定链接断开并且访问者登陆页面时,它将影响该页面的功能并导致不良的用户体验。...对页面上存在的每个链接重复步骤(2-4)。...这是用于使用Selenium查找网站上断开链接的测试方案: 测试场景 转到软件测试test面试小程序后台,即Chrome 85.0上的https://www.test-1.com/ 收集页面上存在的所有链接...执行 我在这里使用PyUnit(或unittest),它是Python中的默认测试框架,用于使用Selenium进行的断开链接测试。

    6.7K10

    WEB-UI 自动化实践

    对于 Selenide 和 Selenium 的原理不在本文中赘述,大家可以到网上学习了解。 Bee 开源地址:https://github.com/youzan/beeyz,欢迎交流。...监听用例测试结果,可对不同的测试结果监听器做不同的处理;2. 失败测试用例重试的监听,一个 fail 的用例最多可重试 3 次。...2.3 失败测试用例重试 网络原因等不确定因素会导致测试用例失败,这种外部因素导致的失败一般都会认为它是无效的,为了提高测试报告的可信度,增加了失败用例重试的机制。...具体做法是实现一个用例测试结果的监听器,当监听器监听到一个 fail 的结果,会触发重试,失败用例最多重试 3 次。 3、元素定位 UI 自动化用例其实可以分成两部分,1. 定位元素;2....页面上的元素都可以用 xpath 来描述;缺点,不稳定,大量使用的话会给用例维护产生很大的负担。

    86940

    【Python爬虫实战】全面掌握 Selenium 的 IFrame 切换、动作链操作与页面滚动技巧

    前言 在使用 Selenium 进行网页自动化测试或数据抓取时,我们经常会遇到需要操作 iframe、模拟复杂的 用户交互动作,以及处理 动态加载页面 的情况。...无论是自动化测试还是爬取动态网页,这些技巧都能帮助你更好地控制浏览器。 一、切换IFrame 在使用Selenium进行网页自动化测试时,iframe是经常会遇到的情况。...因此,当元素位于iframe中时,需要先切换到该iframe,否则Selenium会找不到该元素。...三、页面滚动 在使用 Selenium 进行自动化测试或网页数据抓取时,页面滚动是非常重要的一部分,特别是在处理动态加载内容,如无限滚动页面时。...当高度不再变化时,说明没有新内容加载,停止滚动。 (四)处理滚动的常见问题 页面滚动后定位元素失败: 如果页面内容是动态加载的,滚动完成后需要重新查找元素。

    39811

    《手把手带你学爬虫──初级篇》第5课 Selenium WebDriver的用法

    向页面发送数据并操作 向input框输入数据 当获取到了元素以后,就可以向input框输入内容了,并且使用Keys这个类模拟点击某个按键。...('n') # 点击元素,我们发现竟然回到了第一页,那是因为,当前页非第1页时,页面上出现了上一页元素,class属性值也为n,因此,这时得到的元素为上一页元素 In [71]: ele_next.click...举个例子,如果页面上有n个元素的class都是’column-md-3’,那么只要有1个元素存在,这个方法就返回True text_to_be_present_in_element 判断某个元素中的text...对象定位操作 方法名 含义 browser.find_element_by_id() 根据标签的id属性值查找 browser.find_element_by_name() 根据标签的name属性值查找,当有多个时...,返回第1个 browser.find_element_by_class_name() 根据标签的class属性值查找,当有多个时,返回第1个 browser.find_element_by_tag_name

    2.7K32

    Selenium Python使用技巧(三)

    书接上文和上上文: Selenium Python使用技巧(一) Selenium Python使用技巧(二) 处理不同情况的等待 在Selenium自动化测试中网页可能需要花费一些时间来加载,或者希望在触发测试代码之前可以看到页面上的特定...Selenium具有WebDriverWait,可以将其应用于任何具有条件和持续时间的Web元素。如果不存在执行等待的元素或发生超时,则可能引发异常。...在下面的示例中,我们等待link_text=Sitemap加载到页面上,并在WebDriverWait方法中指定了超时。如果在超时时间内未加载该元素,则抛出异常。...driver.quit() 网页中的滚动操作 在使用Selenium执行测试自动化时,您可能需要在页面上执行上滚/下滚操作的要求。...使用Selenium放大和缩小 为了在进行Selenium自动化测试时放大或缩小,应使用transformCSS属性(适用于相应的浏览器),该属性可让您在页面上执行放大,缩小,旋转,倾斜等操作。

    1.7K30

    3种方式优化Python自动化代码

    可以,但是必须考虑中间某一个用例失败了是否会影响下一个用例的运行?必须考虑好这样情况发生后,任何其它用例都不会受到影响。...想做到所有用例执行之前只访问网页一次,所有用例执行完成以后只关闭一次,就必须符合以下条件: 实际上,每个测试用例的起点都是在登陆页面。...所有用例运行之前,打开浏览器,访问登陆页面。setUp()和tearDown()做不到,它设计的目的就是每一个用例都会去执行的。 setUpClass()是每一个测试类运行的一次setUp。...提示:请输入手机号 # pass #异常用例-未注册手机号 #异常用例-错误的密码 #异常用例-不输入密码 能实现这种方式有2个条件,首先必须考虑:1.每一个测试的失败,会不会影响其它用例的执行...这里有个不好的地方,和测试数据的提取的方式是一样的原因:1.元素定位未必只在一个函数中用一次,有些元素定位可能在多个函数中都要用得到。2.这个页面其实不复杂。

    91910

    selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)

    the cache - perhaps the page has changed since it was looked up 群里经常会有人问,“我循环去点击一列链接,但是只能点到第一个,第二个就失败了...原因就在这里:你点击第二个时已经是新页面,当然找不到之前页面的元素。这时,他会问“可是明明元素就在那里,没有变,甚至我是回退回来的,页面都没有变,怎么会说是新页面?”。...页面,甚至页面上的元素都是有自己的身份证号(id)的。...如果你执行以下的操作,都有可能找错人: refresh,不论你是主动刷新还是页面自动刷新 back,已经跳转到了其他页面,然后你用driver.back()跳回来,这也是一张新的页面了 跳转到了新的页面,但这张新页面上有一些元素跟之前页面是长得一样的...比如:一排分页按钮,你点击下一页跳转到了第二页,想要还用原来的元素操作到下一页,那也是不可能的了。

    1.2K10
    领券