问题背景在配置安知鱼主题的关于页面时,发现helloAbout的动效突然不起作用了。如下图所示
原因分析打开调试控制台,发现在about页面存在报错。
通过排查发现,在selfInfo中的selfInfoContentYear我填的不是纯数字导致的。
修改前1234567selfInfo: selfInfoTips1: 生日 selfInfoContentYear: 3 月 5 日 selfInfoTips2: 星座 selfInfoContent2: 双鱼座 selfInfoTips3: 职业 selfInfoContent3: 自动化工程师
修改后1234567selfInfo: selfInfoTips1: 出生 selfInfoContentYear: 1999 selfInfoTips2: 星座 selfInfoContent2: 双鱼座 selfInfoTips3: 职业 selfInfoContent3: 自动化工程师
恢复正常
问题描述通过git进行版本管理时,可以通过.gitignore文件来配置哪些文件或目录应该被忽略,不纳入版本控制系统的管理范围。但是有时在.gitignore文件中添加对应目录或文件后,在Sourcetree的未暂存文件中仍能看到。
可能原因 可能在之前已经将该目录或文件添加到了 Git 的暂存区或已经进行了版本控制,所以 .gitignore 的规则对这些文件暂时不起作用。
解决方法通过以下命令清除已经添加到暂存区的目录或文件。EEITest/app/build只是举例。
1git rm -r --cached EEITest/app/build
开发背景在自动化测试工作中,常常要对测试机进行通话方面的压力测试。此时,配合机有这样的需求:它需要自动接听来自测试机的电话,然后在通话持续一段时间后自动挂断。
特别要注意的是,配合机必须只对测试机拨打的通话进行自动接听,要将其他来电排除在外,不受其干扰,以此确保通话压力测试能够准确、有效地进行。
相关指令adb shell dumpsys telephony.registry:获取当前设备的通话状态信息
mCallState:来电状态。0:空闲状态;1:响铃;2:通话中;
mCallIncomingNumber:来电号码;
mDataConnectionState :数据流量连接状态(可以用来判断是否打开数据流量)
adb shell am start -a android.intent.action.CALL -d tel:xxx:拨打指定电话
adb shell input keyevent 5:接听电话
adb shell input keyevent 6:挂断电话
功能实现123456789101112131415161718192021def autoAnswer(dev ...
代码片段
未读开发背景在自动化测试和脚本化任务中,常需按步骤执行 adb shell 命令及处理结果。链式调用方式可将这些步骤用代码呈现,实现自动化设备管理和测试任务。例如自动化测试时,先通过 shell 命令安装应用,再检查安装结果,之后进行其他操作。使用 ADBShell 类的链式调用能将操作相连,利用 Python 脚本实现自动化流程控制。
功能实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152class ADBShell: def __init__(self, device: str): self.shell = None # shell 进程对象 self.device = device self.stdout_adb = "" self.stderr_adb = "" self.start_shell() def start ...
代码片段
未读开发背景在 Windows 系统应用开发与部署中,环境变量 PATH 对查找可执行文件和库文件很重要。手动添加新路径到 PATH 繁琐易错,在多用户环境下还会影响系统稳定性。
因此,开发了一个自动化函数用于向用户级 PATH 添加新路径。因修改需管理员权限,该函数会检查权限,同时避免重复添加,以提高效率和系统可维护性、可扩展性,方便软件安装更新等操作。
功能实现需要管理员权限
C#实现12345678910111213141516171819private bool AddUserEnvironmentVariable(string targetPath){ WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new(identity); if(!principal.IsInRole(WindowsBuiltInRole.Administrator)) // 必须要有管理员权限 return false; // 获 ...
开发背景在开发一个 PyQt 应用程序时,我们经常需要执行一些耗时的操作,例如文件读写、网络请求、复杂的数据处理或长时间的计算。如果这些操作在主线程中执行,会导致用户界面(UI)冻结,用户无法与应用程序进行交互,影响用户体验。为了解决这个问题,我们需要将这些耗时操作放在单独的线程中执行。
然而,直接使用多线程会带来一些复杂性,例如线程的创建、管理、信号和槽机制的使用,以及在多线程环境下处理异常和结果的传递等。为了简化这些操作,因此开发了 Task 和 TaskManager 类。
功能实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990from PyQt5.QtCore import QThread, pyqtSignalclass Task(QThread): ""&q ...
代码片段
未读基础类执行终端命令1234567891011def subPopen(cmd: Union[str, list], shell: bool = True, encoding: str = "utf-8", errors: str = "ignore") -> str: """ 执行cmd命令,返回命令执行结果 :param cmd: 命令 :param shell: 是否使用shell :param encoding: 编码 :param errors: 错误处理方式 :return: 命令执行结果 """ _r = subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE) return _r.stdout.read().decode(encoding, errors=errors)
网络类获取当前wifi1234567891011121314151617def ...
开发背景在开发自动化测试工具时,我们经常面临对测试用例进行循环压力测试的需求。由于测试类的重复编写工作量较大,因此计划开发一个抽象基类来简化这一过程。
测试流程测试流程大致如下图所示。
在整个测试流程中存在一个大循环(circle)。首先,执行带有@BeforeClass注解的方法;接着,针对每个测试用例(即带有@Test注解的方法)进行循环测试,在每个测试用例的循环内部,又有一个针对该测试用例自身的循环次数(count)。在这个内部循环中,首先执行带有@Before注解的方法,然后执行具体的测试逻辑,最后执行带有@After注解的方法。
测试结果通过TestResult存储单个测试结果的信息,包括如下内容:
Id:唯一标识
Circle:测试循环次数
Case:测试用例名称
Description:测试用例描述
Count:测试用例执行次数
Status:测试状态,成功/失败
Message:失败时的错误信息
功能实现测试属性123456789101112131415/// <summary>[test]</summary>[Attribut ...
Android中APK部分信息通过adb无法直接获取,可以通过Android中的ApplicationInfo进行获取。
获取内容
packageName:包名
appName:用户可见的名称
isSystemApp:是否是系统应用
launcherActivity:启动的活动名
processName:运行的进程的名称
compileSdkVersion:编译SDK版本
targetSdkVersion:目标SDK版本
icon:图标数据
功能实现权限1234567<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32& ...
在Android自动化测试中,通过自动化测试脚本填充联系人、通话记录、短信等数据,可以模拟出更接近真实用户的使用场景。这种模拟有助于发现那些在日常使用中才会出现的问题,从而提高测试的全面性和准确性。
联系人权限读写联系人需要以下权限,直接动态申请即可
12<uses-permission android:name="android.permission.READ_CONTACTS"/><uses-permission android:name="android.permission.WRITE_CONTACTS"/>
填充方法1234567891011121314151617181920212223242526272829private boolean insertContacts(String names, String num) { // 创建一个操作列表 ArrayList<ContentProviderOperation> ops = new ArrayList<>( ...