Web UI自动化测试系统设计

为Selenium自动化测试优雅的添加日志 在使用Selenium进行Web端UI自动化测试过程中,最让人头疼的就是脚本执行的稳定性。如何快速定位排查运行中产生的各种异常问题,详细记录每一步的操作日志是最有效的方法。 WebDriver事件监听器 本次实例中我们将使用EventFiringWebDriver 和 WebDriverEventListner来完成日志的添加。 EventFiringWebDriver 是一个类,... 阅读详情

Web UI自动化测试系统设计

1. 自动化测试简介

1.1 什么是好的自动化测试框架

在创建测试自动化框架时,我们应该考虑以下要点:

  1. 能够通过使用适当的抽象层快速创建自动化测试
  2. 应易于维护和扩展应该足够简单,以便测试人员编写自动化测试
  3. 该框架应具有有意义的日志记录和报告结构
  4. 重新运行失败测试的重试机制 - 这对WebDriver UI测试特别有用
  5. 对现有系统不会造成影响(setup teardowm)
  6. 最小化测试用例之间的重复 Minimize Test Overlap
  7. 每个用例之间相互独立 Keep each Test independent
  8. 将测试和产品代码分开 Keep test logic out of production code
  9. 对测试用例执行结果进行校验 Verify one condition per test

1.2 自动化测试的基本步骤

自动化测试的基本步骤.png

  1. Setup
    构造用例执行前的前置条件,构造执行环境
  2. Exercise
    执行用例
    3.Verification
    对执行结果进行校验
  3. Teardown
    用例执行结束后,对执行环境进行还原,使SUT回到用例执行前的状态

1.3. 自动化测试常用的思路

1.3.1 记录和回放Record and playback

  1. 功能
    直接录制执行过程,并回放
  2. 实现
    通过录制小工具,将用户对网页的操作过程记录保存
  3. 好处
    适合新手,上手快
  4. 缺点
    稳定性差,xpath一般是根据元素的绝对位置生成,稳定性很差
  5. 应用
    selenium、katalon等测试框架均支持相应的录制工具

1.3.2 数据驱动Data driven

  1. 功能
    “测试数据”与“执行代码”做分离, 使用不同的输入数据测试相同的工作流程。
  2. 实现
    将不同的场景对应的参数提取出来,放在文件中,使用时,只需要遍历文件,将这些参数分别作为测试流程的入参,生成多个测试用例
  3. 好处
    可以通过导入不同的配置,设置不同的执行场景,提高复用性
  4. 坏处
    测试数据和测试流程强关联,如果新增功能,需要增加新的配置参数,增加了使用和扩展的复杂性,只适用于单个简单行为测试,不适合流程测试
  5. 应用
    robotframework中的template,katalon中data set

1.3.3 关键字驱动Keyword driven

  1. 功能
    对页面上的操作行为进行拆分和抽象,保存为一个个具体的行为关键字。用户根据需求对关键字进行组装

  2. 实现
    将每个页面的操作行为,封装为不同的关键字函数,测试用例可调用不同关键字,组成不同的操作流程

  3. 好处
    将单个行为和系统流程拆分,减少耦合,所有的用例针对同一个行为是调用同一个函数,减少维护成本

  4. 坏处
    关键字的个数和页面功能的复杂性成正比

  5. 应用
    page object model

2. 自动化测试设计模式

2.1 Page Object Model

2.1.1 为什么

    考虑这个简单的脚本登录网站:

    如图所示,我们所做的只是找到元素并为这些元素填充值。这是一个小脚本。脚本维护看起来很简单 但随着时间的推移测试套件将会增长  随着代码添加越来越多,维护将变得越来越困难。脚本维护的主要问题是,如果10个不同的脚本使用相同的页面元素,并且该元素有任何更改,则需要更改所有10个脚本。这是耗时且容易出错的。
     更好的脚本维护方法是创建一个单独的类文件,该文件可以找到Web元素,填充它们或验证它们。可以在使用该元素的所有脚本中重用此类。将来,如果Web元素发生更改,我们只需要在1个类文件中进行更改,而不是10个不同的脚本。这种方法称为页面对象模型(POM)。它有助于使代码  更具可读性,可维护性和可重用性。

2.1.2 是什么

Page Object Model是一种为Web UI元素创建Object Repository的设计模式。在此模型下,对于应用程序中的每个网页,应该有相应的页面类。此Page类将查找该Web页面的WebElements,还包含对这些WebElements执行操作的Page方法。这些方法的名称应根据它们正在执行的任务给出,即,如果加载程序正在等待显示支付网关,则POM方法名称可以是waitForPaymentScreenDisplay()。

关于页面对象是否应该包含断言本身,或者仅为测试脚本提供数据以进行断言,存在意见分歧。
在页面对象中包含断言的倡导者说,这有助于避免在测试脚本中重复断言,使得更容易提供更好的错误消息,并支持更多的TellDontAsk样式API。
无断言页面对象的倡导者说,包含断言将提供对页面数据的访问权限与断言逻辑混合在一起,并导致一个膨胀的页面对象。
我赞成在页面对象中没有断言。我认为您可以通过为常见断言提供断言库来避免重复 - 这也可以使提供良好诊断更容易。页面对象通常用于测试,但不应自行进行断言。他们的职责是提供对底层页面状态的访问。由测试客户端来执行断言逻辑。

2.1.3 好处

  1. 页面对象模式表示UI中的操作和流程应与验证分开。这个概念使我们的代码更清晰,易于理解。
  2. 对象存储库独立于测试用例,因此我们可以使用相同的对象存储库用于不同的工具。例如,我们可以将POM与TestNG / JUnit集成用于功能测试,同时与JBehave / Cucumber集成以进行验收测试。
  3. 由于POM类中可重用的页面方法,代码变得更少并且得到优化。
  4. 方法获得更真实的名称,可以通过UI中的操作轻松映射。即如果点击我们登陆主页的按钮后,方法名称就像'gotoHomePage()'。

2.1.4 实现

简单的例子:

 

详细的例子:

步骤1)转到Guru99演示站点

 

步骤2)在主页检查文本“Guru99 Bank”存在

 

步骤3)登录应用程序

 

步骤4)验证主页是否包含“Manger Id:demo”

 

功能中包含两个页面:

  1. 登录页面
  2. 主页(登录后显示)
    因此,我们创建了2个POM类

1. Login page POM

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

public class Guru99Login {

WebDriver driver;

By user99GuruName = By.name("uid");

By password99Guru = By.name("password");

By titleText =By.className("barone");

By login = By.name("btnLogin");

public Guru99Login(WebDriver driver){

    this.driver = driver;

}

//Set user name in textbox

public void setUserName(String strUserName){

    driver.findElement(user99GuruName).sendKeys(strUserName);

}

//Set password in password textbox

public void setPassword(String strPassword){

     driver.findElement(password99Guru).sendKeys(strPassword);

}

//Click on login button

public void clickLogin(){

        driver.findElement(login).click();

}

//Get the title of Login Page

public String getLoginTitle(){

 return    driver.findElement(titleText).getText();

}

/**

 * This POM method will be exposed in test case to login in the application

 * @param strUserName

 * @param strPasword

 * @return

 */

public void loginToGuru99(String strUserName,String strPasword){

    //Fill user name

    this.setUserName(strUserName);

    //Fill password

    this.setPassword(strPasword);

    //Click Login button

    this.clickLogin();        
}

}

2. Home Page POM;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

public class Guru99HomePage {

WebDriver driver;

By homePageUserName = By.xpath("//table//tr[@class='heading3']");



public Guru99HomePage(WebDriver driver){

    this.driver = driver;

}

//Get the User name from Home Page

    public String getHomePageDashboardUserName(){

     return    driver.findElement(homePageUserName).getText();

    }

}

3. 测试用例

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.Assert;

import org.testng.annotations.BeforeTest;

import org.testng.annotations.Test;

import pages.Guru99HomePage;

import pages.Guru99Login;

public class Test99GuruLogin {

WebDriver driver;

Guru99Login objLogin;

Guru99HomePage objHomePage;

@BeforeTest

public void setup(){

    driver = new FirefoxDriver();

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    driver.get("http://demo.guru99.com/V4/");

}

/**

 * This test case will login in http://demo.guru99.com/V4/

 * Verify login page title as guru99 bank

 * Login to application

 * Verify the home page using Dashboard message

 */

@Test(priority=0)

public void test_Home_Page_Appear_Correct(){

    //Create Login Page object

objLogin = new Guru99Login(driver);

//Verify login page title

String loginPageTitle = objLogin.getLoginTitle();

Assert.assertTrue(loginPageTitle.toLowerCase().contains("guru99 bank"));

//login to application

objLogin.loginToGuru99("mgr123", "mgr!23");

// go the next page

objHomePage = new Guru99HomePage(driver);

//Verify home page

Assert.assertTrue(objHomePage.getHomePageDashboardUserName().toLowerCase().contains("manger id : mgr123"));

}

2.1.5 扩展

Page Factory是Selenium WebDriver的内置页面对象模型概念,但它已经过优化。在这里,我们遵循页面对象存储库和测试方法的分离概念。另外,在PageFactory类的帮助下,我们使用@FindBy注释来查找WebElement。我们使用initElements方法初始化Web元素

@FindBy可以接受tagName,partialLinkText,name,linkText,id,css,className,xpath作为属性。让我们使用Page Factory查看与上面相同的示例

2.2 BDD (Behavioral Driven Development)

2.2.1 为什么

软件开发中常见的浪费活动包括:

  1. Dev/QA/BA对需求理解不一致,由于误解或模糊的要求导致的返工
  2. 由于不愿意重构代码而导致的技术债务
  3. 孤岛和交接造成的反馈周期缓慢

低行为的沟通可能是使用BDD的最大优势,使技术团队和非技术团队之间的协作能够以更高的效率运行。用通用语言编写的BDD测试用例的优点是所有人都可以容易地理解应用程序的行为方式。例如,可以使用实际需求的实时示例编写测试用例,以解释系统的行为,减少误解。

能更方便的会用例进行管理

2.2.2 是什么

行为驱动开发(BDD)是一种从TDD(测试驱动开发)发展而来的软件开发方法。它的不同之处在于用共享语言编写,这改善了技术与非技术团队和利益相关者之间的沟通。在这两种开发方法中,测试都是在代码之前编写的,但在BDD中,测试更加以用户为中心,并且基于系统的行为。设计要求为:

  1. 需求应转换为可定义具体示例的用户故事。
  2. 每个示例都应该是有效的用户场景,而不仅仅是测试用例。

2.2.3 应用

'Given-When-Then'公式
这是为用户故事编写BDD测试用例的建议模板,可以定义为:

  • 给定某种情况

  • 当一个动作发生时

  • 那么这应该是结果。

一个实际的例子是:

  • -由于用户没有输入窗体上的任何数据。

  • 当他们点击提交按钮

  • 然后显示验证成功的消息

2.2.4 好处

  1. 不再定义'测试',而是定义'行为'。
  2. 开发人员,测试人员和产品所有者之间更好的沟通因为使用简单语言解释BDD,学习曲线将更短。
  3. 它本质上是非技术性的,可以覆盖更广泛的受众。
  4. 行为方法在开发之前定义了验收标准。

2.2.5 坏处

  1. 要在BDD工作,需要先前的TDD经验。
  2. BDD与瀑布式方法不兼容。
  3. 如果未正确指定要求,BDD可能无效。
  4. 使用BDD的测试人员需要具备足够的技术技能。

3. 自动化系统设计实例

3.1 为什么要分层

  1. 用户在对web UI进行测试时,一般会包含多个Page(功能页面),每个Page都有自己的UI元素和行为操作,各个Page之间相互不干扰,需要分离。

  2. 在新增用例的时候,每个用例设计时都需要考虑配置信息、页面元素信息、行为操作、具体流程设计。不同用例之间的配置信息、页面元素信息、行为操作会有重叠部分,只是流程上会有差异,因此,需要将业务操作和测试用例分离,进行分层设计。

因此,测试系统设计可采用Page Object Model设计模式,以用户登陆为例,可以分成以下几个层次:

Page层:完成单个页面页面元素、页面行为的配置,包括CommonPage基本页面层、PageElement页面对象层、ActionOperator行为操作层。
Workflow TCs:完成单个页面的行为流程和校验的test cases,该test case不能直接执行,只能被真正Main TCs引用。
Main TCs:真正执行的测试用例
Test Suite:测试用例集合
Data-bingding:测试系统所需的配置数据

3.2 Data-binding 数据配置层

功能: 完成系统配置,如:web服务地址、用户名、密码、git/p4地址等信息
实现:

  1. katalon本身支持dataMap,可以上传excel/csv文件,该文件可以被多个testcase同时复用
  2. 配置全局的Execution Profile,此时变量可以在各个case中使用
  3. case 可以设置全局变量和case 内部的变量

3.3 Page层

完成单个页面页面元素、页面行为的配置

3.3.1 CommonPage基础页面层

功能: 完成Page交互时的通用功能,如:点击、切换到frame、拖动滚动条、元素获取等. 该层是Page最底层,可供ActionOperator行为操作层调用。

实现:定义CommonPage,调用katalon WebUI对应的接口,实现上述功能。

3.3.2 PageElement页面对象层

功能:保存不同page的元素path。当页面元素变更了,直接修改单个元素,不存在测试用例维护问题。

实现:新建Object Repository, 按照page划分目录,对每个page的元素Xpath/Css/Arribute进行配置

3.3.3 ActionOperator行为操作层

功能:对每个Page用户独立的行为操作进行封装,如:登陆、新增workspace等。将业务操作与测试用例分离,因为多个用例可能是对应一个业务操作的,这样,我业务代码ji'hu,只需要修改用例就好了。

实现:继承于 CommonPage,实现各个页面独有的所有行为(不包括校验)。每个页面的元素,引用于 PageElement页面对象层

命名:

  • 应该尽可能具有描述性名称
  • 清晰解释这个关键字是做什么的,而不是怎么做的,是抽象级别的(譬如:Input Text或者Administrator logs into system)
  1. 去掉后缀下划线换成空格
  2. 如果名字全部小写,单词首字母换成大写名字可能适当加长
    Good:
    Login With Valid Credentials

Bad:
Input Valid Username And Valid Password And Click Login Button

3.4 WorkFlow TCs 工作流程层

功能:对每个page可能的页面流程进行设计并校验。

实现: 引用ActionOperator行为操作层,将页面流程封装称测试用例

3.5 TestCase测试用例(Main TCs)

功能:完成具体测试用例

实现 : 调用WorkFlow工作流程层,进行流程组装

命名:

  • 应该尽可能具有描述性名称
  1. 去掉后缀下划线换成空格
  2. 如果名字全部小写,单词首字母换成大写名字可能适当加长

例子:
Login With Empty Password Should FailLogin With Empty Username Should FailLogin With Empty Username And Password Should FailLogin With Invalid Username Should FailLogin With Invalid Password Should FailLogin With Invalid Username And Invalid Password Should Fail

3.6 TestSuit测试用例套件层

功能:每个testSuit中包含多个测试用例,可对testcase进行分组,指定待执行的测试用例。
实现:配置test suit
命名:

  • 应该尽可能具有描述性名称
  1. 去掉后缀下划线换成空格
  2. 如果名字全部小写,单词首字母换成大写名字可能适当加长
    举例:login_tests.robot -> Login Tests
    IP_v4_and_v6 -> IP v4 and v6

3.7 Log日志层

功能: 保存测试用例中运行过程中的日志、截图。

实现:

  1. 采用katalon本身的日志打印,KeywordUtil.logInfo(String message). 而不是Print函数
  2. webUi.takeScreenshot()可以直接截图
    3.katalon支持配置录屏功能

3.8 Report报告层

功能: 保存执行结果。
实现:katalon默认会生成每个test suit执行结果

3.9 SetUp 和 TearDown

功能:为每个测试用例/用例集提供用例执行的前置配置和后置配置
实现:

  1. 每个testcase内部支持自定义method。

  2. testsuits中的script模式下可进行基于每个testcase和每个testsuit下的通用配置。

  3. Test Listeners支持全局范围内的配置。

执行顺序如下:

 

如果大家对于学习Python有任何问题,学习方法,学习路线,如何学习有效率的问题,可以随时来咨询我,或者缺少系统学习资料的,我做这行年头比较久,自认为还是比较有经验的,可以帮助大家提出建设性建议,这是我的Python交流qun:785128166,有任何问题可以随时来咨询我。
 

基于Selenium与Pytest框架的Web UI自动化测试系统的设计与实现 随着互联网的高速发展,软件技术日新月异,产品更新换代的加快等,始终都离不开一个最核心的要素就是保证产品的质量,测试人员则在其中担任着不可或缺的角色。测试人员的主要工作职责就是通过各种测试手段去发现软件潜在的漏洞,最终保证产品质量。但随着敏捷开发的盛行,适用于解决传统手工回归测试效率低的痛点的自动化测试技术也越来越受到测试人员的重视。本文所探讨的就是软件自动化测试框架的实现,首先是对需求进行分析,然后通过对比国内外成熟的自动化测试框架技术进行技术选型,最终确定使用基于Python语言的,结合Selenium 阅读详情

相关推荐

Web UI 自动化测试方案(超级干货)

项目讨论 项目中符合自动化测试的部分有哪些?(目标和范围 scope, 准入准出标准) 稳定的需求点、变动较少的页面 每日构建后的测试验证 daily build 比较频繁的回归测试 需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重复任务 自动化用例在整个项目的测试用例的覆盖率 一般的要求 50% + 重点的要求 80% + 根据项目的具体要求,变动特别...

TestingGDR的博客 1万+

在Springboot中使用pagehelper实现分页管理

我们在开发Web应用时,经常会使用到分页。 如果你也在用 MyBatis,建议尝试该分页插件pagehelper,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。 官网地址:https://pagehelper.github.io/ 我从github上的一个项目中,找到一个包装公共类。和另一个用于返回json格式的数据的公共类一起使用,效果更好。 关于返回JSON格式数据的公共类可以看用于Springboot项目中,控制层返回给前端的JSON格式的通用结果公共类CommonResult

就是喜欢JAVA 716

UI自动化测试基础介绍

一、UI自动化测试介绍 1、什么是自动化测试 概念:由程序代替人工进行系统校验的过程。 1.1、自动化测试能解决的问题? 1、回归测试 针对之前老的功能进行测试,通过自动化代码实现; 针对上一版本的问题的回归; 2、兼容性测试 实例化不同的浏览器驱动就相当于对不同浏览器进行操作,从而解决浏览器的兼容性问题; 3、性能测试 通过一些工具来模拟多个用户实现并发操作; 4、提高工作效率,保障产品质量 1.2、自动化测试的优点 1、自动化测试能在较少的时间内执行更多的测试用例; 2、自动化测试能够减少人

石头缝里的小松鼠(AlySam) 4533

java 汉字转换为拼音

前端输入中文汉字,保存汉字字母。 maven导入: <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependen...

Third_Week的博客 4725

AirTest-selenium基于Web实现UI自动化测试

一、简介: 1、AirtestIDE:跨平台的UI自动化测试编辑器,适用于游戏和App; 2、对于自动化测试新手而言,AirTest是一款可快速上手的UI自动化测试框架; 3、在阅读本文章之前,希望大家可以先去看下官方文档,对于airTest是什么,能做什么,以及怎么使用都有非常清晰的介绍; 4、官方文档链接地址为:http://airtest.netease.com/docs/cn/in......

Python+大数据+数据分析+自动化+Vue组件开发 9475

UI自动化测试保姆级教程①

自动化测试简介自动化测试就是 利用[工具]或[代码]替代人工完成对软件项目的[测试过程]作用自动化测试主要用于以下几个方面回归测试压力测试兼容性测试总的来说: 自动化测试的目的就是"提高测试效率, 保证软件产品的质量".分类优缺点优点缺点(误区)1. 自动化测试可以完全替代手工测试?2. 自动化测试一定比手工测试厉害?3. 自动化测试可以发现更多的BUG?4. 自动化测试适用于所有测试场景?UI自动化测试UI自动化测试就是 通过[代码]和[工具]对软件项目的。

m0_70094411的博客 2535

java项目common常用方法和类

在一个项目当中,common类通常作为一个工具类和一些通用方法,在这里记录以下mall项目中所用到的common中的方法。

weixin_53903995的博客 2655

Web UI自动化测试之Selenium工具篇

本文介绍了从自动化测试简介到Web应用自动化测试工具Selenium的使用,主要涉及内容有元素定位、元素操作、特殊元素操作、元素等待、鼠标&键盘操作、浏览器操作等。

ANTeam的博客 2194

api接口的返回信息封装(code,message,data)与分页数据封装,通用。

源码来自github上一个Java的学习项目 mall-learning下的mall-tiny01 GitHub链接???? 先看目录结构 common api CommonPage (分页数据封装????) CommonResult (通用返回对象) IErrorCode (interface,封装API的错误码) ResultCode(枚举一些常用的API操作码) 一、对于一个简单的api,最显而易见的就是 码(code) 和 信息(message),故对于这通用的方法,就写到接

weixin_43980559的博客 1万+

Web端UI自动化测试简介

首先什么是UI? UI即User Interface(用户界面)的简称 传统的UI测试就是通过人工的方式去操作用户界面,从而发现程序的bug,那么UI自动化要做的事情就是用代码替代人为的操作,完成对用户界面的测试。 那什么样的项目适合做UI自动化呢? Web端UI自动化工具介绍 1.UTF( Unified Functional Testing) = QTP( Quick Test Pro)...

m0_46482126的博客 1270

Python UI自动化测试与Web UI自动化测试框架详解

传统的商业模式以业务驱动产品,而现在则以技术驱动产品。特别是在产品迭代速度快,市场不断变化的当下,产品调整,很多时候是基于客户的需求,基于整个产品战略的调整。单纯的手工测试越来越无法适应这个变化的过程。测试人员怎样做到快速响应并且保证产品在上线后质量能够满足市场的要求?怎样通过测试技术的手段来达到测试效率的提升?这些值得我们思考。测试工作的意义,主要包括两个方面,一是产品质量的管理,二是测试效率的提升。自动化测试技术的应用越来越普遍,这源于企业的要求和互联网技术的发展。

悦分享 1273

Web UI自动化测试

​ 随着IT行业的发展,产品愈渐复杂,web端业务及流程更加繁琐,目前UI测试仅是针对单一页面,操作量大。为了满足多页面功能及流程的需求及节省工时,设计了这款UI 自动化测试程序。旨在提供接口,集成到蜗牛自动化测试框架,方便用例的设计。 ​

豆子熊 1430

RK3588嵌入式开发:从零构建Rockit多媒体处理引擎的实战指南

本文详细介绍了如何在RK3588嵌入式平台上从零构建Rockit多媒体处理引擎的实战指南。涵盖开发环境搭建、工具链配置、源码编译流程、硬件加速优化及典型问题解决方案,帮助开发者高效利用RK3588的NPU和VPU加速特性,实现高性能多媒体处理应用。

mango的博客 186

UI自动化测试是什么?什么项目适合做UI自动化测试

UI 测试涵盖了用户交互部分,包括用户关注的网站结构和视觉部分。Web 网站包含许多来自 CSS,JavaScript 和许多其他语言的不同 Web 元素,网站元素可以连接到屏幕、键盘、鼠标或用户用于与网站进行交互的任何其他工具,UI 测试则捕获这些元素并对其进行测试和声明。在执行 UI 测试时,需要注意确保应用程序不存在任何跨浏览器兼容性问题。由于每个浏览器都使用不同的浏览器引擎,并且可能不支持相同的 CSS 功能。因此,确保UI 在所有主要浏览器上无缝呈现非常重要。

NHB456789的博客 1470

全球、中国各省市县等行政区划(含十段线)shape及geosjon数据免费下载

免费下载全球、中国各省市县等行政区划(含十段线)shape及geosjon数据

mhf403445651的博客 3458

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】

How to reduce the number of transistors to reduce circuit area? -- Take the Binary Full Adder as an example 优化面积的方法 1. 减少晶体管的数量 2. 改变gate matrix的布局

Jie_MSD的博客 6429

自动化测试系列 —— UI自动化测试

UI 测试涵盖了用户交互部分,包括用户关注的网站结构和视觉部分。Web 网站包含许多来自 CSS,JavaScript 和许多其他语言的不同 Web 元素,网站元素可以连接到屏幕、键盘、鼠标或用户用于与网站进行交互的任何其他工具,UI 测试则捕获这些元素并对其进行测试和声明。在执行 UI 测试时,需要注意确保应用程序不存在任何跨浏览器兼容性问题。由于每个浏览器都使用不同的浏览器引擎,并且可能不支持相同的 CSS 功能。因此,确保UI 在所有主要浏览器上无缝呈现非常重要。

OKC_0_Westbrook的博客 1318

YOLO11改进-注意力-引入自调制特征聚合模块SMFA

SMFA(自调制特征聚合模块): SMFA模块用于协同建模局部和非局部信息,它分为两个分支:一个是EASA(Efficient Approximation of Self-Attention,简化的自注意力分支),用于捕获非局部信息;另一个是LDE(Local Detail Estimation,局部细节估计分支),用于捕获局部细节。EASA通过对输入特征进行下采样,然后利用全局特征的方差进行调制,再与原始特征进行聚合,提取非局部结构信息。LDE分支则通过卷积操作提取输入特征中的高频局部信息。

qq_64693987的博客 2208

自动化测试系列 —— UI测试

UI 测试涵盖了用户交互部分,包括用户关注的网站结构和视觉部分。Web 网站包含许多来自 CSS,JavaScript 和许多其他语言的不同 Web 元素,网站元素可以连接到屏幕、键盘、鼠标或用户用于与网站进行交互的任何其他工具,UI 测试则捕获这些元素并对其进行测试和声明。在执行 UI 测试时,需要注意确保应用程序不存在任何跨浏览器兼容性问题。由于每个浏览器都使用不同的浏览器引擎,并且可能不支持相同的 CSS 功能。因此,确保UI 在所有主要浏览器上无缝呈现非常重要。

YLF123456789000的博客 1475

YOLOv11在STM32H7上的MCU部署实战:基于CMSIS-NN的高效推理实现

嵌入式AI与MCU部署技术解析 本文系统介绍了基于STM32H7微控制器的YOLOv11模型部署方案。主要内容包括: 边缘计算背景下MCU的AI部署优势与挑战,重点分析了STM32H7平台特性 YOLOv11模型的结构优化,包括E-ELAN骨干网络和Meta-ACON激活函数等改进 CMSIS-NN加速库的架构原理,在STM32H743上可实现5.4倍卷积加速 完整的开发环境搭建流程,涵盖硬件选型、工具链配置和模型转换 模型优化关键技术,包括int8量化、剪枝和内存占用优化等 实验表明,该方案在保持模型精度

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 853

久坐不慌,健康护航 —— 智能震动提醒坐垫的设计与实现

硬件核心:选用 ESP32 为主控,HX711 + 应变片实现精准压力检测,8050 三极管驱动震动马达,锂电池 + TP4056 满足便携供电需求;软件逻辑:核心是 “压力阈值判断 + 时间计时”,达到久坐阈值后触发震动提醒,流程图清晰体现了循环检测、状态重置的核心逻辑;代码特性:代码注释完善,阈值可灵活调整,支持串口调试,新手可直接编译烧录并根据实际场景校准。

weixin_42300449的博客 398

Ui自动化概念+Web自动化测试框架介绍

为:browser.find element by xxx,其中到底根据啥进行定位,是根据xxx来决定的,比如 browser.find element byid节点id属性值)则是根据DOM节点的id进行定位的。如果妄图实现全面的UI层的自动化测试更是劳民伤财,投入了大量人力时间结果却不尽人意,因为越往上层,用例维护成本越高,尤其是UI层的元素经常改变的产品。2)项目需求变动不频繁:如果项目需求变动频繁,在做自动化时会导致大量的脚本需要不断的迭代维护,就失去了uI自动化解放劳动力的目的。

OKC_0_Westbrook的博客 1141

基于Python的全卷积网络(FCN)实现路径损耗预测

本文提出一种基于全卷积网络(FCN)的无线信道路径损耗预测方法。通过合成数据生成模块构建包含房间布局和发射点坐标的训练数据集,采用双分支FCN架构融合空间特征与坐标信息,引入空间注意力机制增强关键区域提取。实验表明,该方法相比传统模型能更准确地预测复杂环境下的路径损耗,平均绝对误差降低约35%。系统支持端到端训练,可扩展融合多模态数据,为5G网络规划等应用提供高效预测工具。

huanghm88的专栏 576
上一篇: Python面向对象你都会?元类了解一下
下一篇: 转给即将做测试的你
测试小小小
博客等级 码龄6年 265粉丝 364原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值