Bot Style Tests

这篇具有很好参考价值的文章主要介绍了Bot Style Tests。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Bot Style Tests · SeleniumHQ/selenium Wiki · GitHub

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

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

# bst.py
from selenium.webdriver.remote.webdriver import WebDriver


class ActionBot:
    def __init__(self, driver: WebDriver) -> None:
        self.driver = driver

    def 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 ActionBot


def 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 By


class Page:
    def __init__(self, driver: WebDriver) -> None:
        self.driver = driver

    @property
    def search_input(self):
        return self.driver.find_element(By.ID, "kw")

    @property
    def search_button(self):
        return self.driver.find_element(By.ID, "su")
  • 将每个元素封装为一个类方法。
from po import Page

def 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 By


class BotPage:
    def __init__(self, driver: WebDriver) -> None:
        self.driver = driver

    def 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 BotPage

def 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 By


class ActionBot:
    """bot style"""
    def __init__(self, driver: WebDriver) -> None:
        self.driver = driver

    def 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文章来源地址https://www.toymoban.com/news/detail-488179.html

from poium import Page, Element, CSSElement

class 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测试库。

到了这里,关于Bot Style Tests的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • D. Problem with Random Tests

    Problem - 1743D - Codeforces   思路:因为是或,所以答案一定会比原串更大,并且为了保留更多的1,我们可以选择原串作为其中一个串,另一个串则要找到第一个为0的位置,我们希望让这个为1,为了让这个位置在或之后为1,需要满足两个条件,假设这个位置为id,那么首先要满

    2024年02月12日
    浏览(30)
  • 安装喵版yunzai-bot(Miao-Yunzai)安装云崽bot超详细,Linux(centos)

    有问题请评论留言 1、安装包准备: 1) Node.js( 版本至少v16以上 ) 官网地址: https://nodejs.org/en 官网下载地址:https://nodejs.org/dist/ ps:建议不要下载高版本node,可能跑云崽会报错 2) Redis 官网地址:https://redis.io/ 官网下载连接:https://download.redis.io/releases/ 2、服务器远程连接

    2024年01月23日
    浏览(25)
  • 文心一言 4.0 ERNIE-Bot 4.0 :ERNIE-Bot 4.0 大模型深度测试体验报告

    本心、输入输出、结果 编辑:简简单单 Online zuozuo 地址:https://blog.csdn.net/qq_15071263 百度文心一言 4.0 :如何申请百度文心一言 4.0 昨天申请的 文心一言 4.0 ERNIE-Bot 4.0 测试资格,目前已经拿到,我们将开始对 文心一言 4.0 ERNIE-Bot 4.0 进行一些体验测试 相关跳转 文心一言 4.0 E

    2024年02月08日
    浏览(103)
  • Teams Bot App 云端资源创建

    这篇文章来详细讲一下 Teams app 的云端资源的自动创建。我们还是以 Hello World Bot 这个 sample 为例。 让我们点击 Teams Toolkit 图标,进入 Toolkit 的 panel。如果你之前还没有在vscode 里登入过 azure 账号,你会看到在环境 dev 下,提示我们需要登入 azure 账号,我们点击 “Sign in to Azu

    2024年02月05日
    浏览(28)
  • Junit运行错误:报错no tests were found

    在正常书写测试类时,尝试运行发现报错:no tests were found 上网搜索出现该情况的可能性主要为 1.@Test注解的单元测试方法不能有返回值 2.进行单元测试的方法不能私有化 修改单元测试方法后问题仍未得到解决 后来发现可能是junit依赖有问题,更换junit依赖版本为4.12(原本使

    2024年02月03日
    浏览(41)
  • Junit测试运行出现No tests were found

    执行contextLoads()方法的时候是没问题的。 当想单独执行add()方法时就出现了No tests were found这个错误。 然后我试着将add()方法返回值改成void,执行成功。 又试了一下将方法定义为private,同样报错。 @Test注解的单元测试方法 不能有返回值 ,要用 void 。 方法定义为 private 的也不

    2024年02月11日
    浏览(32)
  • 【Postman】利用Tests和Environment实现登录自动保存Token

    在使用 Postman 做接口测试的时候发现每次请求功能时都要在 Header 中手动修改 Token ,当接口变多时会产生效率问题,故考虑使用 环境变量(Environment) 来保存。 环境变量分为以下三种: 全局变量 :全局有效,在 Postman 中的任何集合中都可以使用该变量,作用域最大。 环境变量

    2024年04月14日
    浏览(26)
  • 解读BOT攻击,探索灵活且准确的安全之道

    车票、秒杀、限量球鞋……面对这样的抢购场景,为什么总是落后于人?其实你遇到的并不是真人,而是恶意BOT。恶意的BOT进行信息数据爬取、薅羊毛等攻击行为,正损害着企业和用户的利益。在过去 5 年,几乎每个企业都会遇到由于 BOT 而导致的用户投诉和流失,已成为造

    2024年01月20日
    浏览(26)
  • Studio Bot - 让 AI 帮我写 Android 代码

    不出所料,今年的 I/O 大会只突出了一个 “AI” 。Google 旗下的各类产品都成了其展示 AI 实力的舞台。连面向开发者的产品 Android Studio 也新增了 Studio bot 功能,希望通过 AI 帮助开发者更轻松地写代码: Studio Bot 使用谷歌编码基础模型 Codey (后者基于最新 PaLM2 大语言模

    2024年02月05日
    浏览(42)
  • JUnit5单元测试提示“Not tests were found”错误

    JUnit5单元测试提示“Not tests were found”错误,如下图所示: 或者 问题解析: 1)使用@Test注解时,不能有返回值; 2)使用@Test注解时,不能使用private; 存在以上情况时执行单元测试,都会提示“Not tests were found”错误,如下图所示: 正确的示例是使用public void定

    2024年01月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包