#2 楼 @chocolatesweety 你贴的是 appium client 输出的 log ,一些错误细节已经被隐藏掉了,所以定位不了问题。
1、appium server log(如果是命令行,就是命令行里的输出字符,如果是 GUI,就是里面黑色底的界面里面的内容)
麻烦提供一下:
1、appium server log(如果是命令行,就是命令行里的输出字符,如果是 GUI,就是里面黑色底的界面里面的内容)
2、使用环境:appium 版本、client 版本、android 版本等。
引起 Unknown server error 的原因有很多,有可能是 dump 出错,UIAutomator 挂了等等。光靠 unknown server-side error 定位不了问题的,需要 appium server log 才能比较准确地准确定位问题。
我竟然和三位大神一起放在被 @ 的位置,受宠若惊啊!
对于 serverAddress,我建议如果允许外部调用的话统一使用 0.0.0.0 。
这个是监听地址,只有发送的网络包里的 destination 是符合这个 serverAddress 及 port 的才会被 appium 捕获到。
如果输入 127.0.0.1 那就只有在 server 那台机器上的脚本能连到这个 appium server 了,因为外部链接都不可能是发到 127.0.0.1 的(因为 127.0.0.1 在任何机器上都是指代这台机器本身,发请求到 127.0.0.1 是发不了给其他机器的)。
0.0.0.0 表示广播地址,能匹配所有 ip 地址,即监听所有发到这个机子的指定端口的网络包。这个和直接用本机 ip 地址的主要区别是:用这个的话你就不用管这台机本机地址是什么了(针对 ip 地址经常会变化的环境或者批量部署比较有用。否则换个 ip 这个参数就得改一次)
至于这个参数的存在理由,其实主要就在于是否使用 127.0.0.1 了(即是否能被网络中其他电脑调用,说白了是权限的差异)。我见过的其他类似程序(如 xwalkdriver)是封装成默认只允许本地连接,如果需要允许外部链接需要另外设置允许的外部链接地址。
#14 楼 @shu element name 指的是 content-desc 或者 text 属性。
可以看下我以前的这个帖子:关于 appium get_attribute 方法的坑。
实际上只需要给个 element.id 就够了,appium 不仅支持 byName,也支持 byXpath,byId 等。只是在 android 上由于隐藏元素在控件树上不可见,所以在 findElement 的时候就会出错了。
我后面发个帖子专门说下这个 scrollTo 吧。
#11 楼 @zsx10110 问题就是在 android 上用不了。
对于 android 底层使用的 UIAutomator,至少需要知道 scrollView 和需要查找的元素的 text ,但这个 API 只传了需要查找元素的 text ,没有 scrollView 。appium 应该要通过控件树自动找到 element 所在的 scrollable view,然后把它传给 UIAutomator 。
对于 iOS 的 UIAutomation,因为 UIAutomation API 直接有个 scrollToVisible
的方法可以不传 scrollView ,所以可以直接使用。
不错!图文并茂,学到了不少。
看来 React Native 的调试更接近于传统的前端调试啊,原生控件基本都已经被隐藏了。
#9 楼 @shu 明白了,我的 scrollTo 是 server 封装的,client 只负责发命令,好处是不仅能支持 Android(不过有点问题),还能支持 iOS 。
你的 scrollTo 是 Java-client 自己基于 UIAutomator API 封装的 scrollTo ,是这个 client 特有的方法。
Java 使用 server 封装的 scrollTo 的方法如下:
// java
WebElement element = driver.findElement(By.name("Element Name"));
HashMap<String, String> arguments = new HashMap<String, String>();
arguments.put("element", element.getId());
(JavascriptExecutor)driver.executeScript("mobile: scrollTo", arguments);
不错,写得很详细。
不过真的很容易看晕。。。代码数量比较多,而且大多是代码片段,得结合导入了代码的 IDE 来看效果才好。
wife 是什么网络?
无法联网这个要看下到底是手机连不到服务器还是服务器返回这样的错误信息吧?
写得很详细!赞!
不过源码包导入后不是应该跳到 Solo.java 文件吗?为什么是 Solo.class ?这个不是很明白。
PS:Markdown 的超链接写法是这样的:
[超链接](url)
你文中用错了。
#2 楼 @adfghzhang 不客气。
麻烦添加一下头像吧。
#2 楼 @shu 同问,印象中 scrollTo 传的是 element.id ,不是 text 啊。不过不知道你的 scrollTo 和我们理解的是不是同一个?
我说的是这个:
http://appium.io/slate/en/master/?python#scroll-to
另外,通过 id 查找这个其实局限性更大,因为一般情况下 scrollView 中的元素使用的 resource-id 是一样的。
实际实践中应该是支持多种定位方式(id, text, xpath 等)。
没猜错的话你是拿对应真机的 ipa/app 放到模拟器上跑了。
iOS 模拟器都是 x86,真机都是 arm ,两者编译时使用的参数是不一样的,所以真机能跑的放到模拟器就会无限闪退。
至于 XCode 里面直接点 run 的话它会自动根据你选择的设备使用不同的编译参数现场编译,所以会有用的是同样程序的错觉。
PS:遇到 app 自己闪退方面的问题不要光看 appium server log,此时设备自身的包含应用内部日志的 log 才是能够有效定位问题的。
相当清晰了!赞!
这里的 “全栈测试工程师” 其实就是项目的保姆啊。。。啥都要干还必须是背锅侠。。。
不过开发还根据他的技术栈来安排工作,测试基本是哪里需要测试就去哪里,从服务器后台到接口,再到前端。有些时候全栈就是这样被逼出来的。。。
补充一下添加打赏二维码的步骤:
准备好二维码图片:
上传二维码:
还等什么,赶紧发帖争取精华啊!
Good Job!UIAutomatorViewer 本身的架构确实很方便扩展。
录制那块有个疑问:看你写的是 Appium 的 python 脚本,但没看到具体是哪些代码把每个操作步骤 write 到文件中的。是不是把 writeFile 分别放在了各个点击事件中了?