Appium+ios,开发调整页面交互后,调整前使用 Appium-dosktop 能够找到的元素 A,调整之后无法找元素 A,这个问题要怎么解决?可能通过修改 Appium 源码解决吗?
at
2021年04月14日
有用 xcode inspector 来查看 UI 结构不?有的话方便直接截个完整的结构图么?
appium 底层是用 XCUITest 获取控件树的,能拿到的空间 xcode inspector 应该也可以看到。如果 xcode inspector 看不到,说明实际这个控件就是不存在,而不是被别的东西盖住。
另外,如果实在拿不到空间,除了坐标,也可以考虑用图像识别来获取控件位置,相对来说适配性会好一些。
Appium+ios,开发调整页面交互后,调整前使用 Appium-dosktop 能够找到的元素 A,调整之后无法找元素 A,这个问题要怎么解决?可能通过修改 Appium 源码解决吗?
at
2021年04月13日
这描述有点抽象。查了下图例提到的一些容器名字,应该是用了 JXPagingView 这个控件库。暂时没搜到这个控件和 appium 配合使用的相关文章。
建议拿下源码,本地用 xcode debug 看下实际 UI 层级结构有什么特别,是不是可以拿到你图中粉色部分的控件?可以参考
https://blog.csdn.net/PZ0605/article/details/50670285
Appium+ios,开发调整页面交互后,调整前使用 Appium-dosktop 能够找到的元素 A,调整之后无法找元素 A,这个问题要怎么解决?可能通过修改 Appium 源码解决吗?
at
2021年04月13日
是不是可以了解下,开发具体改了啥?为啥改完就找不到了?既然都做 UI 自动化了,就不要把被测 app 当黑盒了,去了解下开发改动逻辑吧。
无法找元素 A,是整个树结构变了,还是元素属性变了,还是元素直接从树结构里消失了?这张截图啥都看不出来。
麻烦提问的时候,把这些信息补充完整吧。完整了解问题信息是分析问题的前提,问题是啥都不知道,怎么解决无从谈起。
从你的描述看,服务端应该是根据 cookie 来判定账号的。
requests.session() 本身设计是用来在整个会话过程中保持一些配置继续复用,避免每次都要重复配置的,和你这个需要有多个配置,不同位置要用不同配置有点差异。
如果确实是通过 cookie 判定账号,你可以全局设定每个账号角色的 cookies 值,然后使用 requests.session() 前手动设定里面内置的 cookies 试试?
具体怎么设定 cookies 找到了这篇文章,可以参考下:
https://www.jianshu.com/p/264955856e61
不知道具体组织情况,仅针对提到的 3 个能力分享下自己大概想到的:
专业能力:内部高级别的同学做定期分享培训、协同外部一些机构提供培训学习机会(如批量购买极客时间课程、设立技术图书库等)、设立专业能力强人之类的奖项定期奖励
创新能力:参加外部会议(如 MTSC、沙龙等)了解外部情况、设立创新能力强人之类奖项、日常工作安排能挤部分时间让能人去做一些创新探索性工作
协同能力:团建、项目复盘、设立技术 PM 统筹他参与需求的全流程进度及风险,为项目按时完成负责,并定期有对应优秀技术 PM 奖项进行奖励(个人觉得,为项目负责的想法是协同的前提,这个技术 PM 能把想法变为职责,让大家去突破。老想着是别人的事自己不去管,容易导致只管自己,协同效率低下)
这个问题略大,不知道怎么回答你。以自己理解简单说下把:
首先需求只有个 峰值 20w 用户 ,是不能直接转化为场景的。需要分析抢券这个场景涉及哪些接口请求(比如查券接口 - 抢券接口),然后这些接口请求的频率大概会多高(比如查券可能一秒一次,抢券从头到尾只有一次),把需求转换为抢券时各个接口大概每秒会承受多少次请求,即要达到多少 tps,接口请求之间比例大概多少这些。这些最好和后端开发沟通下,他们对自己系统最熟悉
建议可以买些书或者极客时间的课程看下,这样效果才好。个人推荐极客时间高楼老师的课,讲得比较简单易懂。
WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: io.appium.uiautomator2.common.exceptions.UiAutomator2Exception: Timed out after 10000 milliseconds waiting for root AccessibilityNodeInfo
at
2021年04月10日
根据日志直译,10 秒内没有获取到界面元素树根节点信息。
一般多见在一些动态界面上,你公众号具体啥内容,可以补充一下相关信息?
好,加了仓库后好了。感谢
我特意再限制了只跑 util 包里的,避免依赖其他东西跑不出来。看跑出来结果还有些效果,部分空指针没做好处理的有发现了。但也有一些无效的失败,比如文件名是随机的,导致文件不存在,文件 io 操作报异常导致失败;或者 json 格式错误,导致 Json 解析失败。
从目前情况看,会有一定的误报,测试结果还是得人工二次确认。找空指针或者数组越界有一定效果,但业务逻辑就基本都不怎么能校验到了。
PS:建议给些用 java + maven 的例子? kt + gradle 在 android 比较流行,但非 android 相对比较少。
对 kotlin 版本啥的有要求么?拿个开源项目加上文档里给的测试代码试了下,没能跑起来
对应项目地址:
https://github.com/chenhengjie123/AgileTC/tree/try-randunit
,分支是 try-randunit 。
运行方式是直接在 idea 中点击测试用例前面的执行按钮触发执行。
错误提示:
java.lang.NoClassDefFoundError: org/jeasy/random/EasyRandomParameters
at com.williamfzc.randunit.mock.EasyRandomMocker.genDefaultEasyRandomParameters(EasyRandomMocker.kt:31)
at com.williamfzc.randunit.mock.EasyRandomMocker.<init>(EasyRandomMocker.kt:23)
at com.williamfzc.randunit.models.MockModel.<init>(MockModel.kt:31)
at com.williamfzc.randunit.env.AbstractTestEnv.<init>(AbstractTestEnv.kt:32)
at com.williamfzc.randunit.env.NormalTestEnv.<init>(NormalTestEnv.kt:21)
at com.williamfzc.randunit.env.NormalTestEnv.<init>(NormalTestEnv.kt:20)
at com.xiaoju.framework.SmokeTest.<clinit>(SmokeTest.kt:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.runners.Parameterized.allParameters(Parameterized.java:280)
at org.junit.runners.Parameterized.<init>(Parameterized.java:248)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: org.jeasy.random.EasyRandomParameters
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 30 more
不知道楼主想要的完整资料,完整到什么程度?
一般自动化框架需要提供三个层次的能力,核心层(提供用例执行管理能力,比如 testng )、工具层(提供触发关键操作的能力,比如接口测试中的 rest-assured,UI 自动化中的 appium、selenium)、适配层(【可选】提供用例编写的模板或规范,减少重复提高编写效率。比如提供 excel 或者 yml 写用例的方式)。
常见组合:
核心层:testng + reportNG/Allure report/extentreports,或直接 junit(比较少见)
工具层:rest-assured(调用接口 + 断言一条龙提供)/基于 httpclient 自行封装/基于其他 http 框架自行封装
适配层:单接口常见用 excel/yml(一般结合 testng 本身提供的 dataProvider 使用),多接口多见直接写代码(代码里区分单接口调用层、多接口业务操作层,用例是通过调用这两层的方法来完成操作)
因为大多都是自行组装,根据各个团队自身水平来决定框架怎么做,不同层根据需要可以用不同的框架去组合完成。因为这里面用的最多的是 testng ,所以它相关文章会比较多也不奇怪。
个人理解,应该是指那些有自己 toC 的基于互联网的产品的公司把。比如 BAT、美团这类。
互联网公司比较大的特点是迭代快、时间紧(需要紧急占领市场的项目直接 007 也是会有的)。要做什么功能主要由产品基于运营及用户反馈来设定需求。技术体系基本是客户端(app/h5/小程序)+ 服务端(java 居多)。
质量上的挑战主要是,在被压缩的测试时间内(是的,被压缩,有的项目会直接按上线时间倒排),怎么把控好风险,保障质量。确保可以按时上线同时不至于出现严重影响用户使用的问题。