My second Android application

Appium与Robot Framework集成CI:打造移动应用自动化测试流水线 自动化测试是提升软件交付效率和质量的关键实践,其核心原理是通过脚本模拟用户操作,实现重复性测试任务的自动执行。在移动应用领域,Appium作为基于WebDriver协议的跨平台框架,能够统一驱动iOS和Android应用,解决了多端测试的技术难题。结合Robot Framework这一关键字驱动的通用测试框架,可以构建出可读性强、易于维护的自动化测试资产。这种技术组合的价值在于,它能将自动化能力从本地执行扩展到持续集成(CI)流水线中,实现代码提交后自动触发测试、快速反馈质量状态。典型的应用场景包括移动应用 阅读详情

界面组成:

功能代码: 

import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AlertDialog
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : BaseActivity() {
    private lateinit var editText: EditText
    private lateinit var viewText: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
        //以上为Android Studio自动生成

        viewText = findViewById<TextView>(R.id.secondTV)
        editText = findViewById<EditText>(R.id.editText)
        val button = findViewById<Button>(R.id.button)
        val image = findViewById<ImageView>(R.id.imageView)
        val progressBarH = findViewById<ProgressBar>(R.id.progressBarH)
        val progressBar = findViewById<ProgressBar>(R.id.progressBar)

        button.setOnClickListener() {
            val message = editText.text.toString()
            //设置图片素材
            image.setImageResource(R.drawable.tzuyu)

            if(message == "") {
                Toast.makeText(this, R.string.warning, Toast.LENGTH_SHORT).show()
            } else {
                viewText.text = getString(R.string.greeting, "main", message)
                //设置进度条可见性,默认为不可见
                if (progressBar.visibility != View.VISIBLE) {
                    progressBar.visibility = View.VISIBLE
                }
                //设置警告对话框
                AlertDialog.Builder(this).apply {
                    setTitle("This is a Diaglog")    //标题
                    setMessage("Maybe there's something wrong")    //讯息
                    //设置正确按钮及其动作
                    setPositiveButton("OK") { dialog, which ->
                        progressBar.visibility = View.GONE
                    }
                    //设置正确按钮及其动作
                    setNegativeButton("Cancel") { dialog, which ->
                    }
                    show()
                }
                /*if (progressBar.visibility != View.VISIBLE) {
                    progressBar.visibility = View.VISIBLE
                }
                //设置条状进度条,每点击一次+10进度
                //进度满时关闭进度条,并将进度清理
                progressBarH.progress = progressBarH.progress + 10
                if (progressBarH.progress == progressBarH.max) {
                    progressBarH.visibility = View.GONE
                    progressBarH.progress = 0
                }*/
            }
        }
    }
}

实现效果:

注:点击“OK”关闭进度条 ,点击“Cancel”保持原状

测试技能碎片化?RYG练习场:从自动化到芯片测试的体系化训练 测试工程师的技能往往呈碎片化,会跑脚本不等于懂框架设计,面试时常常被问住。测试技能的核心在于形成体系:从功能测试、自动化测试到性能、安全与硬件测试,每个模块都应有明确的练习路径与验证反馈。RYG练习场以红黄绿三色结果驱动每一次实践,通过技能地图、练习环境、验证机制与面试闭环,帮助测试人员将零散经验转化为可量化能力。它覆盖Appium+pytest自动化、接口测试、性能与老化测试、渗透测试、车载与芯片测试等高频方向,并以真实项目练手和面试题自测收尾,是测试工程师建立技能体系、准备面试的高效路径。 阅读详情

相关推荐

MCP Gateway实战:60秒将REST API接入MCP标准

MCP(Model Context Protocol)是面向AI Agent的工具发现与调用协议,其核心价值在于统一Tool Schema描述、支持上下文感知调用和自动化编排。然而现实中90%的AI服务基于REST架构,缺乏原生MCP支持,导致协议断层、安全策略碎片化与治理能力缺失。MCP Gateway作为生产级协议网关,通过OpenAPI 3.0自动推导MCP Tool Schema、声明式多模态认证(API Key/OAuth2/mTLS等)及连接抽象机制,在不改造后端的前提下实现REST到MCP的零

weixin_34267123的博客 416

Android开发进阶:从Toast到Snackbar的全面解析与实战指南

在Android应用开发中,用户反馈机制是提升交互体验的关键环节。Toast作为早期轻量级提示组件,因其无法交互、样式单一等局限性,逐渐被功能更强大的Snackbar取代。Snackbar基于Material Design设计语言,不仅继承了非模态提示的优点,还支持可交互的Action按钮、灵活的样式定制,并能与CoordinatorLayout协同工作,实现更优雅的布局联动。其技术价值在于提供了轻量且可扩展的用户反馈解决方案,特别适用于操作结果确认、网络状态通知、撤销操作等常见场景。通过掌握Snackba

weixin_33700350的博客 465

QT学习笔记

QT学习笔记

weixin_52938172的博客 1497

BIN类守护进程

#ifndef MINER_COMMON #define MINER_COMMON #define TIME_ONE_SECOND (1000) #define TIME_ONE_MINUTE (60*TIME_ONE_SECOND) #define TIME_ONE_HOUR (60

Leon的小黑屋 656

Elasticsearch Standard Tokenizer 深度解析:原理、实战与最佳实践

本文深入解析Elasticsearch的StandardTokenizer标准分词器,从核心原理到实际应用进行全面讲解。文章首先介绍分词器在文本分析中的关键作用,重点阐述StandardTokenizer基于Unicode标准的分词规则和多语言支持特性。通过详细示例演示其分词流程、Token结构及自定义配置方法,并对比Whitespace、Pattern等分词器的差异。针对电商搜索、多语言处理等典型场景提供最佳实践方案,包括配置示例、性能优化建议和特殊字符处理技巧。最后总结StandardTokenizer

ywl470812087的博客 534

解决turmex安装kali报错问题

在手机上安装好turmex后,都喜欢安装一个Linux系统,我当时安装的时kali,但是安装过程中,报错不断。 2019.8.24更新 1,出现问题首先看下载kali源文件是否完整 安装步骤中,会显示[解压中.....] ,可以看到解压的大小。 如图所示,完整源文件不小于81M。 如果源文件过小,则说明下载错误,而且在remove kali这个命令下,是不会删除源文件的,下一次安装只...

WeiLuckyStrike的博客 1万+

【ANR分析】一篇文章带你读懂Service为什么会ANR?

Service的ANR触发原理,是在启动Service前使用Handler发送一个延时的Message(埋炸弹过程),然后在Service启动完成后remove掉这个Message(拆炸弹过程)。如果在指定的延迟时间内没有remove掉这个Message,那么就会触发ANR(没有在炸弹爆炸前拆掉就会爆炸),弹出AppNotResponding的弹窗,让用户选择是继续等待还是直接退出应用程序。通过源码更深层次的理解ANR是这么产生的,从而在日常开发和实际ANR问题分析时能够游刃有余。

TechMix的博客 972

川崎机器人总线通信_三菱PLC和发那科机器人进行CCLINK总线通信

三菱CCLINK主站模块采用QJ61BT11N,该模块用在Q系列PLC上,如果是5U或3UPLC,可用FX5-CNV-BUS加FX3U-16CCL-M或FX5-CCL-M模块。本教程以Q系列为例CCLINK接线方法如下模块拨码含义如下接线和拨码设置好后,接着在编程软件上设置CCLINK通信参数打开编程软件,在工程导航栏打开参数——网络参数,选中CCLINK打开。打开如下画面起始IO为模块本体占用I...

weixin_42300398的博客 7553

如何免费畅玩英雄无敌3:VCMI开源引擎五大平台安装实操终极指南

VCMI是一款免费开源的《魔法门之英雄无敌3》游戏引擎,目标是让这款经典策略游戏在Windows、macOS、Linux、Android和iOS上获得完整且增强的体验。无论您是当年的老玩家,还是刚接触这款名作的新人,本文都会用一套清晰的思路,带您在各平台快速完成VCMI安装与游戏数据导入,全程约需10到20分钟。 ## 从真实痛点出发:为什么建议您用VCMI重启英雄无敌3 先看几个高频场景,是

gitblog_00298的博客 206

国外无人机蜂群作战典型战例及发展趋势

参与袭击的无人机为简易组装的固定翼飞机,采用小排量活塞发动机和手机GPS通信模块零件,机翼为轻木加泡沫板混合结构,尾梁为铝合金方管,主要依靠胶带粘接,以上全部配件均可在商用市场买到,成本较低,可在短时间内装配完成。③战场纵深短、瞬时性强。蜂群作战的参战数量显著增加,这一方面得益于无人机技术的飞速发展使得廉价无人机可以大量生产和仿制,另一方面凭借迅速发展的投放和回收技术以及集群控制技术,使得无人机蜂群可在极短时间内实现编队饱和攻击,在快速消耗敌方高价值防空武器系统的同时,保证己方物资系统的突防概率。

renhongxia1的博客 2481

天池长期赛:二手车价格预测(422方案分享)

本次比赛是一次很好的锻炼数据挖掘能力的入门赛,从EDA-数据清洗-特征工程-模型调参-模型融合,能够完整的学习到大数据的分析和挖掘,值得历练。

weixin_46685991的博客 1万+

高效部署大语言模型:llama.cpp C++推理框架深度解析

llama.cpp是一个用纯C/C++编写的大语言模型推理框架,专注于在各种硬件平台上高效运行LLaMA系列模型。该项目通过优化的矩阵运算和内存管理,实现了在CPU、GPU和移动设备上的高性能推理,特别适合需要低延迟、高吞吐量的生产环境部署。 ## 技术架构深度解析 llama.cpp的核心架构基于GGML张量库,这是一个专门为机器学习优化的C语言张量库。框架采用分层设计,将模型加载、推理计算

gitblog_01065的博客 507

AutoSAR_BSW高阶 7. Signal Group 信号组

Autosar BSW的高级配置是实现复杂汽车电子系统的关键步骤之一。通过合理配置信号组和使用适当的参数,您可以提高系统性能,确保数据的可靠传输。在本博客中,我们深入探讨了信号组的概念和高级配置参数,并提供了示例代码,希望这些信息能够帮助您更好地理解和应用Autosar BSW的高级配置。如果您在配置过程中遇到任何问题,不妨寻求专业支持,以确保您的汽车电子系统能够顺利运行。Autosar COM 模块是一个广泛应用于汽车行业的关键技术,它使不同的电子控制单元能够有效地通信和协作。

一直在水些技术小文 663

NDK jni 加载静态库

加载静态库到android,静态库的提供方式有2种, a. 通过源文件来编译静态库 b. 加载已经编译好的静态库 首先我们来看,通过源文件来编译静态库,工程目录如下 第一步:我们来看我们的jni目录,目录下包含以下4个文件 Android.mk  --- 编译文件 first.c ,first.h --- 外部需要引用的文件 second.c  -

hetangbian的专栏 647

ML307R OpenCPU TCP使用

实现现象 平台下发数据,板子在收到数据之后,马上再发送到平台,通过串口助手可以看到已经接收到数据。ML307R TCP 是使用LWIP的标准的socket通信,具体TCP流程可以自行百度。实验目的:实现把接收的数据再发送到服务端。因为是4G,所以必须用外网的。

面朝大海春暖花开 2232

如何在 Linux 上安装 RTX 5090 / 5080 /5070 Ti / 5070 驱动程序 — 详细指南

Linux 上的 NVIDIA 5090 是 AI、游戏和渲染的强大引擎,但需要耐心。如果稳定性是首要考虑因素,请坚持使用开源驱动程序,并关注 NVIDIA 论坛以获取未来更新。

iCloudEnd的博客 6912

Ubuntu 20.04 LEMP生产环境深度调优指南

LEMP(Linux+Nginx+MySQL+PHP)是Web服务的经典技术栈,其核心价值在于高并发承载能力与生产级稳定性。理解Nginx事件模型、MySQL InnoDB碎片机制、PHP-FPM进程管理原理及系统内核网络参数协同,是实现性能跃升的关键。尤其在Ubuntu 20.04 LTS这一长期支持版本中,默认配置面向开发而非生产,需针对性优化worker_connections、php mysql 某个表有碎片处理策略、SSL加密套件、OPcache与JIT编译等关键环节。本文聚焦真实业务场景下的可交

weixin_33824363的博客 493

从零搭建实时数仓:基于Flink+ClickHouse的实践

实时数据处理和实时数据查询。市场上的技术方案众多,为何选择Flink+ClickHouse?

AIGC应用创新大全的博客 1320

note

CPU,此处CPU与BL芯片断开,没有连背光芯片。屏,此处屏与BL芯片断开,没有连背光芯片。虽然signal函数更简单些。行 3744: 07-22 23:56:01.139 <6>[ 5.577037][ T919] [2024:07:22 15:55:51](7)[919:modprobe][drm] [lcdkit /I]: type:66, name:[qcom,mdss-dsi-apl-bl-mode-off-command], length:16, pkt-count=1。

m0_73462935的博客 10万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

开源功能开关(feature flags) 和管理平台之unleash

Unleash 是一个开源的功能标志(feature flags) 和管理平台,**允许您在不中断服务的情况下安全地发布和测试新功能**。它提供了一个集中式界面,用于管理和控制哪些用户可以看到哪些功能,以及如何启用这些功能。

西京刀客 1740

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MCP+Google ADK:轻量级系统扩展方法论

模块化控制平面(MCP)是一种将流程编排、状态协调与异常决策从业务逻辑中解耦的架构范式,其核心在于分离‘做什么’与‘怎么做’;结合Google Application Development Kit(ADK)提供的声明式工具链(如Cloud Workflows、Pub/Sub、Cloud Run),可构建具备弹性扩缩、事件驱动、安全治理能力的云原生系统。该组合规避了Kubernetes的运维复杂性与纯Serverless的状态碎片化问题,特别适用于中小团队快速演进MVP至高并发生产环境。技术价值体现在最小可

dengkuituo0680的博客 388

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Go函数设计与调用:签名即契约,调用即执行

在Go语言中,函数并非简单语法结构,而是承载接口契约、错误语义与并发行为的核心单元。其本质是编译期确定的类型化契约——通过函数签名(参数/返回值/接收者)完成‘配置’,通过上下文传递、错误处理和goroutine调度实现安全‘调用’。这种静态、显式、可推导的设计范式,支撑了高并发微服务、CLI工具及嵌入式系统的工程稳定性。它区别于Python装饰器或JS高阶函数的动态配置,强调类型安全、IDE可导航性与运行时可预测性。典型应用场景包括HTTP Handler定义、数据库操作封装、日志采集模块等。本文聚焦Go

weixin_34008784的博客 561

Nginx文件上传模块优化Web应用性能实践

文件上传是Web开发中的基础功能,传统后端处理方式常导致服务器资源紧张。通过Nginx模块化处理文件上传,利用其高性能事件驱动架构,可实现请求处理与文件存储的解耦。nginx-upload-module作为高效解决方案,将文件直接写入磁盘临时存储,仅传递元数据到应用服务器,显著降低CPU和内存消耗。该技术特别适用于大文件上传、高并发场景,如视频平台、云存储服务等。结合分块上传、病毒扫描等安全措施,既能保障系统稳定性,又能有效防御恶意文件攻击。实测表明,该方案可使上传性能提升3倍以上,同时减少60%的资源占用

weixin_30588675的博客 362

性能测试从入门到精通 JMeter完全指南(下)

成功失败创建 Test Plan添加 Thread Group配置 Thread Group 参数添加 HTTP Request Default添加 HTTP Header Manager添加第一个 HTTP Request添加 View Results Tree运行测试检查结果🎉 基础脚本完成!调试排查 Step 2: 添加 HTTP 请求 Step 3: 添加监听器 5.2 参数化(数据驱动测试) #mermaid-svg-8hfKVHc8BCOyFWH7{font-family:"trebuc

lw的博客 1703

爬虫教程( 2 ) --- scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

scrapy 教程、可视化管理工具、反爬框架、ai 爬虫

freeking101的博客 5256

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+
上一篇: Kotlin中实现静态
下一篇: RelativeLayout
栈不全
博客等级 码龄5年 173粉丝 152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值