其实我当时这么问只是觉得你的问题有点突兀,以为你还有东西要写。。。
看了下你们的策略,我感觉没啥问题,只是感觉你们 CTO 略忙。。。
#22 楼 @t880216t 看了下,appium python client 源码改了,现在 ConnectionType
直接继承的是 object
,不是 Enum
,所以以前的用法用不了。
可以参考下面的用法根据 self.driver.network_connection
的值获取 ConnectionType
的对应属性名:
# python
from appium.webdriver.connectiontype import ConnectionType
def get_connection_name(connection):
"""
根据 connection 的值获取对应状态名
:param connection: 通过 driver.network_connection 获取到的网络状态
:return: 对应状态名,如 NO_CONNECTION
"""
for attr in ConnectionType.__dict__:
if ConnectionType().__getattribute__(attr) == connection:
return attr
raise AttributeError("ConnectionType with value %s do not exist." % connection)
# 获取状态名
get_connection_name(self.driver.network_connection)
我把 bat 误解为百度 + 阿里 + 腾讯了。。。建议换成 cmd 吧。。。
我试了下,它的流程是先把钱包进红包,然后再把红包发出去。所以你取消的只是发红包这个步骤,包红包的步骤还是完成了的。
不过有一个地方确实做得不好, 发出的红包 里面选中这个实际没有发给任何人的红包后应该能够选择发给哪个联系人。否则这就是一个永远发不出去的红包了。
你定位软键盘是想干嘛?
iOS 上看了下,没这问题。应该是 Android 的问题。
这是写完了?
赞~
话说,标题不翻译是故意的吗?
至于你提到的 testerhome社区有看到is_displayed在appium中是不可用的
,不知道你具体是哪篇文章看到的?能给下出处吗?
#8 楼 @testblue 这么说吧,正常自动化测试用例的执行套路是:
setUp()
test1()
tearDown()
setUp()
test2()
tearDown()
...
setUp 和 tearDown 是由测试框架(如 Junit,testng)提供的固定方法,默认什么都不做。而你想要达到的相互不影响,应该是在 setUp 和 tearDown 里操作。
还是举前面注册和登录的例子吧:
setUp:打开应用
test1():注册用户
tearDown:删除用户并关闭应用
setUp:打开应用
test2():注册用户并登录
tearDown:删除用户并关闭应用
要消除 test1 的效果,应该在 tearDown 里面做。这也是上面其他同学提到的 “case 之间解耦” ,即无论测试集中的 test1 用例通过或失败,test2 用例都不会受到影响。
你手工测试收起键盘是怎么操作的?你在自动化里使用的是一样的操作吗?
这个我觉得不是 robotium 的问题吧。按照顺序来说,你的 test1 跑完,然后继续跑 test2 ,此时 test1 的遗留效果还在,这很正常吧。
我猜你想要的是 test1 跑完就整个 app 重置,然后 test2 跑的时候相当于是重新启动 app 来跑的?举个例子,test1 注册了用户,test2 是注册并登录这个用户,所以 test1 跑完后 test2 注册就会出错(这个用户已经注册过),而你需要的效果是 test1 跑完的遗留效果和没跑过(即没有注册过用户)一样?
#13 楼 @qumoy0315 那这个控件是 webview 里面的内容?如果是这样,建议先 switch 成 webview 再获取数据。
#11 楼 @qumoy0315 赞。
从你的代码上看,感觉是控件自身没有更新自己的属性值。你知道这具体是什么控件不?
代码麻烦使用代码块。。。看到头都晕了。。。
我觉得是组件的问题,显示更新后相关属性没有更新。
不过因为不知道你具体是什么属性,怎么获取组件值,获取什么组件值,所以具体我也不清楚啦
比较接近的应该就是一些界面遍历工具了,如思寒的 AppCrawler 。
testerhome 目前不兼容 IE 浏览器。请使用 chrome 或者 Firefox 访问。
已修复: