Bot Style Tests VS Page Objects

news/2024/11/6 12:32:52/

 尽管 Page Objects 在你的测试中减少重复的方式是非常有用的,这并不总是一个团队愿意遵循的模式,另一种方法是遵循更command-like的测试风格。

一个bot是基于Selenium APIs 面向操作的抽象。这意味着如果你发现命令对你的应用程序没有做正确的事情,改变他们很容易。

# bst.py
from selenium.webdriver.remote.webdriver import WebDriverclass ActionBot:def __init__(self, driver: WebDriver) -> None:self.driver = driverdef click(self, *locator):self.driver.find_element(*locator).click()def submit(self, *locator):self.driver.find_element(*locator).submit()def type(self, *locator, text):elem = self.driver.find_element(*locator)elem.clear()elem.send_keys(text)
  • 这其实相当于对Selenium API 的再次封装。
# test_bst.py
from selenium.webdriver.common.by import By
from bst import ActionBotdef test_bst(browser):browser.get("http://www.baidu.com")action_bot = ActionBot(browser)action_bot.type(*(By.ID, "kw"), text="bot style tests")action_bot.click(*(By.ID, "kw"))time.sleep(5)

*(By.ID, "kw") - 这种写法不太常见,我单纯是为遵循文档上的写法。

Page Objects

page objects 相信大家非常熟悉了,为了保持讨论的完整性,我还是给出例子。

from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.common.by import Byclass Page:def __init__(self, driver: WebDriver) -> None:self.driver = driver@propertydef search_input(self):return self.driver.find_element(By.ID, "kw")@propertydef search_button(self):return self.driver.find_element(By.ID, "su")
  • 将每个元素封装为一个类方法。
from po import Pagedef test_po(browser):browser.get("http://www.baidu.com")page = Page(browser)page.search_input.send_keys("bot style tests")page.search_button.click()
  • 对不同的元素对象进行操作。

Bot Page

Bot Page是什么鬼?其实我们可以把上面的两种设计模式整合一下。在Page层既包含元素又包含动作。Bot Page是随便取的。

from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.common.by import Byclass BotPage:def __init__(self, driver: WebDriver) -> None:self.driver = driverdef type_search_input(self, text):self.driver.find_element(By.ID, "kw").send_keys(text)def click_search_button(self):self.driver.find_element(By.ID, "su").click()
  • 元素定位和操作封装到一起。
from po import BotPagedef test_bst_po(browser):browser.get("http://www.baidu.com")page = BotPage(browser)page.type_search_input("bot style tests")page.click_search_button()
  • 这种方式就是最完美的吗?不是,这相当于强行将元素定位和操作绑定。但有时候一个元素可能有多种操作,比如输入框,clear()send_keys()submit() 都是可以的。

混用

三种模式并非相互对立,可以混合使用。比如,第一种和第三种混用。

from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.common.by import Byclass ActionBot:"""bot style"""def __init__(self, driver: WebDriver) -> None:self.driver = driverdef click(self, *locator):self.driver.find_element(*locator).click()def submit(self, *locator):self.driver.find_element(*locator).submit()def type(self, *locator, text):elem = self.driver.find_element(*locator)elem.clear()elem.send_keys(text)class BotPage(ActionBot):""" bot Page """def type_search_input(self, text):self.type(*(By.ID, "kw"), text=text)def click_search_button(self):self.click(By.ID, "su")
  • 用 bot Page 去继承 Action bot,bot page 写起来就简单一些了。

poium

当然,最简单的仍然是 poium。

GitHub - SeldomQA/poium: Page Objects design pattern test library, support selenium、appium、playwright, etc

from poium import Page, Element, CSSElementclass PoiumPage(Page):search_input = Element(name='wd')search_button = Element(id_='su')class CssPage(Page):search_input = CSSElement('#kw')search_button = CSSElement('#su')
  • 他几乎是Page Objects设计模式的天花板了。程序员高质量Page objects测试库。

http://www.ppmy.cn/news/435348.html

相关文章

d610网络计算机,键位传统 简单操作即可快速调整

键位传统 简单操作即可快速调整 接下来我们再来看看更多相机的细节设计。键盘区依旧如我们熟悉的设计,全新的VI设计在D610上有着相当完整的体现。这种设计已经贯穿了现在尼康的单反产品线,从D4、D800,到D7100、D5200、D3200。这样设计的好处在…

什么是EBNF?并举例介绍

EBNF(Extended Backus-Naur Form)是一种扩展的Backus-Naur形式,是一种用于描述上下文无关文法(CFG)的元语言。 EBNF用于定义编程语言、数据格式和其他形式的语法。它使用一些扩展的符号来描述语法规则,包括…

微信小程序拍照,调用相机,模仿相机APP

微信小程序拍照 实现拍照&#xff0c;切换摄像头&#xff0c;图片预览&#xff0c;拍照动画 先看效果 wxml <!--调用相机拍照--> <view class"page-container"><view classtop><view classmask1 {{ka? "ka" : "" }}>…

2023年端午节放假通知

过节、业务两不误&#xff0c;服务“不打烊”。欢迎新老客户前来咨询下单&#xff01;感谢各位一直以来的支持和信赖&#xff0c;你们是易天光通信成长道路上不可或缺的力量&#xff0c;提前祝大家在端午节玩得开心&#xff0c;吃得开心&#xff01; 深圳易天光通信有限公司 …

手机坏了,怎么办?

最近我的手机只能发短信和上网&#xff0c;却不能打电话和接电话&#xff0c;我很郁闷。原本让一个老板新我手机的&#xff0c;他却没修好&#xff0c;还说这是第二个毛病&#xff0c;我真无语了。钱白花了&#xff0c;心疼啊&#xff0c;现寻一个能刷机的程序和软件把我的手机…

苹果手机基带坏了怎么办

想要修复苹果手机基带&#xff0c;先在电脑端下载最新版本的itunes&#xff0c;将手机关机并连接itunes&#xff0c;同时按住home键和关机键10秒&#xff0c;松开关机键&#xff0c;继续按住home键&#xff0c;直到电脑上提示识别在DFU状态下的设备&#xff0c;根据提示提取文件…

android系统坏掉了怎么办,手机系统坏了怎么修复

语音内容&#xff1a; 大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 以安卓手机为例&#xff0c;手机系统坏了大体分两种情况&#xff1a; 第一种能进recovery&#xff0c; 第二种不能进recovery。 什么是recovery呢&#xff1f…

触摸屏坏了有哪些现象_外屏坏了有哪些现象

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 以手机为例&#xff0c;其外屏坏了就会出现屏幕显示不正常或触摸不正常。而内屏坏了的话手机屏幕就不能显示图像&#xff0c;一般会变成花屏或者屏幕显示不全。触摸屏坏会出现触摸不…