代码片段
未读添加依赖在build.gradle中添加uiautomator依赖
1androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
编写用例需要在androidTest中编写用例,而不是在main中。新建一个test类,下面是一个打开设置的一个测试。
12345678910111213141516171819202122232425package com.tt.demo; import androidx.test.ext.junit.runners.AndroidJUnit4;import androidx.test.platform.app.InstrumentationRegistry;import androidx.test.uiautomator.By;import androidx.test.uiautomator.UiDevice;import androidx.test.uiautomator.UiObject2; import org.junit.Test;impo ...
在 WPF 中,数据绑定是一种强大的机制,用于将 UI 元素(如TextBox、Button等)与数据对象进行关联。
INotifyPropertyChanged接口允许数据对象在其属性值发生改变时通知 UI,从而使 UI 能够自动更新以反映最新的数据状态。
优势
自动更新 UI:当数据变化时,UI 自动刷新(无需手动调用 setText 或 update)
减少样板代码:避免手动同步数据和控件状态
支持 MVVM 模式:在 WPF 中,数据绑定是 MVVM(Model-View-ViewModel)的核心
数据验证 & 格式化:自动处理输入验证、数据转换(如日期格式化)
ToolMainWindow中实现ToolMainWindow.xaml.cs
12345678910111213141516171819202122232425262728public partial class ToolMainWindow : UserControl, INotifyPropertyChanged{ private int _co ...
代码片段
未读开发背景在 Android 自动化测试体系中,ADB(Android Debug Bridge) 作为连接 PC 与移动设备的关键纽带,发挥着不可或缺的作用。在实际操作中,我们需频繁调用各类 ADB 命令,但每一次调用都涉及指令发送、结果回传以及结果解析处理等一系列繁杂流程。为简化操作流程、提升测试效率,我对常用的 ADB 指令进行了系统性封装 。
功能实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214 ...
代码片段
未读开发背景执行终端指令,并返回结果
功能实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879public class NProcess{ /// <summary> /// 执行cmd命令 /// </summary> /// <param name="command">cmd命令</param> /// <param name="useUTF8">是否使用utf-8编码</param> /// <returns>包含命令执行结果的Process对象</returns> public static Process Run(string co ...
代码片段
未读开发背景对http请求进行简单封装
功能实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126public class Requests{ /// <summary> /// 异步发送GET请求并返回响应内容。 /// </summary> /// <param name="url">请求的URL。</param> /// <param name="timeout"> ...
开发背景uiautomator是Android平台上用于UI自动化测试的框架,可模拟用户对设备屏幕的各种操作,如点击、输入、滑动等。Python中有相对成熟的解决方案,普遍应用于自动化测试中。项目地址:
引用站外地址
uiautomator2
codeskyblue
然而,近期在C#项目的开发进程中,我始终未能找到合适的解决方案。基于此状况,我计划借鉴该项目,着手打造一个C#版本的项目。
原理研究首先先了解一下,该项目实现UIAutomator的原理。
简单来说,其实现原理是:在手机内开启一个rpc服务,然后PC端借助adb forward(安卓调试桥端口转发功能)将该服务在手机中的端口转发至本地。随后,PC端向此服务发送诸如点击、输入之类的请求,手机中的该服务便会执行相应操作来完成这些请求。
尝试一下通过以下指令,将U2.jar导入到设备中并启动一个端口固定为9008的服务端
12ad ...
介绍adb(Android Debug Bridge)是Android开发工具包(SDK)中的一个命令行工具,用于在计算机和Android设备之间进行通信和交互。它允许开发人员安装、调试和管理Android应用程序,以及在设备和计算机之间传输文件。
安装步骤安装SDK从android官方网站(SDK 平台工具版本说明 | Android Studio | Android Developers)中下载Android SDK,可以仅下载SDK中的Platform-Tools,Platform-Tools包含了adb与fastboot。
设置环境变量为了使系统中的任意位置都能使用adb,需要对环境变量进行设置。
右键点击此电脑或计算机,选择属性,进入高级系统设置,点击环境变量。在系统变量栏中,找到Path并双击。
点击新建,添加Platform-Tools路径,如下图。
保存。
打开命令提示符(cmd),输入adb version,如果返回类似下面的结果,则表示配置成功。
12345C:\Users\qiata>adb versionAndroid Debug Bridge ve ...
代码片段
未读开发背景一般来说,我们可以通过adb shell screencap指令来截取android设备中的图像,但是获取到的是完整的图像。当我们需要进行图像识别的操作时,需要获取指定区域的图像来进行对比。
功能实现C#部分代码如下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566/// <summary>/// 对指定设备进行屏幕截图并裁剪指定区域,然后将裁剪后的图像保存到指定路径。/// </summary>/// <param name="x">裁剪区域左上角的x坐标。</param>/// <param name="y">裁剪区域左上角的y坐标。</param>/// <param name="width">裁剪区域的宽度。</param> ...
开发背景51单片机需要接收电脑端发送的指令,来控制继电器的通断,从而控制连接电脑端的USB数据线的通断。
指令配置如下
12AT+USB=1 // 连接usbAT+USB=0 // 断开usb
功能实现具体代码如下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127#include <reg52.h>#include <string.h>#define uchar unsigned char#define uint unsigned intuint dataCount; ...
问题背景系统高级启动选项中,有时找不到“禁用驱动强制签名”的选项。
问题原因一般来说,是由于恢复环境的丢失,WINER.wim丢失造成的。该镜像存在于C盘根目录的Recovery文件夹,该文件夹被删除或精简。
解决方法
首先WIN+X 打开终端(管理员)
输入 reagentc /info 并回车,查看WINER.wim文件是否真的丢失
1reagentc /info
如图所示Windows RE位置为空,说明文件丢失。
在系统盘根目录新建名为Recovery的文件夹,然后再在Recovery文件夹内新建名为WindowsRE的文件夹。完整路径即为C:\Recovery\WindowsRE。
从微软原版Windows ISO镜像中获取WinRE.wim映像,直接提取镜像中install.wim文件。或者也可以从没有丢失WINRE.wim镜像的电脑中拷贝一份。放在C:\Recovery\WindowsRE目录下。
再次WIN+X 打开终端(管理员),输入reagentc /setreimage /path C:\Recovery\WindowsR ...