#1 楼 @chenhengjie123
我的是这样的,我用了客户端的检查最新版本,没有提示我更新,应该是最新的了?或者官方更新了要重新下?
你说的是对的,启动参数要求用 8.4,但是我的 xcode 里面只有 9.3 的模拟器,所以启动报错了,最后是下的 8.4 版本的模拟器正常启动了。
原来 MonkeyRunner 还可以这样用。我研究了一段时间发现只能点坐标,然后我就放弃了 MonkeyRunner。感谢 1 楼的分享。话说我不懂回帖怎么 @ 人= =!
LZ 说的是哪个端?IOS 是有自带的方法:
desired_capabilities={
'app': app,
'platformName': 'iOS',
'deviceName': 'iPhone 6',
'autoAcceptAlerts': 'true',
})
'autoAcceptAlerts': 'true',这句话就是自动接收系统权限的方法。如果是安卓,就等弹出之后捕获元素丢到 try 里面去处理吧
楼主要的是点击 click 之后执行下一步的时候进行智能等待,发现元素了就再去执行方法,没发现元素就等待。不知道我有没有理解错误,如果我没有理解错误,我的实现方案是这样的:
from selenium.webdriver.support.ui import WebDriverWait
def find_element(self, *loc):
"""
定位元素,定位正确后返回元素的信息,外部调用传入元组参数必须有*,
例如:
find_element(*self.native_caixun)
:param loc: 元组类型,结构必须是(By.NAME, u'财讯')
:return: element
"""
try:
element = WebDriverWait(self.driver, 30).until(lambda x: x.find_element(*loc))
return element
except NoSuchElementException, e:
print 'Error details :%s' % (e.args[0])
def find_elements(self, *loc):
"""
定位元素,定位正确后返回元素的信息,外部调用传入元组参数必须有*,
例如:
find_elements(*self.native_caixun)
:param loc: 元组类型,结构必须是(By.NAME, u'财讯')
:return: elements
"""
try:
# return self.driver.find_elements(*loc)
elements = WebDriverWait(self.driver, 10).until(lambda x: x.find_elements(*loc))
return elements
except NoSuchElementException, e:
print 'Error details :%s' % (e.args[0])
这样执行的好处就是每次找元素的时候都会智能等待 30 秒。超过 30 秒则超时报错。下面是我自己封装的方式:
def clickHangQing(self):
"""
点击导航栏的行情按钮
:return: None
"""
self.find_element(*self.native_hangqing).click()
def clickEditSelect(self):
"""
点击编辑自选,进入编辑自选页面
:return: None
"""
self.find_elements(*self.edit_select)[0].click()
def clickFindStock(self):
"""
点击放大镜,进入查询自选股界面
:return: None
"""
self.find_elements(*self.edit_select)[1].click()
这样实现起来就无需考虑网络等原因造成的不必要的硬等待,都会智能等待 30 秒。
#18 楼 @codeskyblue 恩,我先按线性走代码写了完整的一个流程,然后才转 PO 的,我本来是没有基础的,都是从头开始,Python 也是从头开始学的,总之加油吧。慢慢写下去总会懂的
好像还好吧,如果是 dmg 或者 exe,直接就可以用了,安装命令行也就是几小时的事情,并不复杂。
我从没接触过 Appium 到现在能写出 PO 的测试案例,总共也就话了一个月,写的不见得多好,但是起码能跑起来,文档的话也不是很难,感觉 LZ 是没有真正动手去写吧。
#3 楼 @debugtalk 噢噢噢,我看错了
有时间试试,我之前用的是'adb shell cat /proc/pid/net/dev | grep wlan0'这个方法获取的流量,每次都要清空数据,并且杀掉其他所有可能会使用流量的进程,有点麻烦。感谢分享!!
不过有一个问题想请教一下,如果这个 APK 是首次安装,那么这样通过 PID 获取会不会出问题?首次安装的 APK 好像没有 PID,不知道我有没有记错
#4 楼 @abcfleeting 你倒是说呀,我这强迫症看着好难受
#6 楼 @jamesparagon 一起加油
#1 楼 @jacexh 刚好那部分需要用截图处理,其他部分还没传到 github 上
def testJiangXu(self):
"""测试自选页面降序排列"""
num = self.getLength() - 1
self.clickNameNum()
a = 999999
for x in range(num):
try:
int(self.getStockNum(x))
self.assertTrue(int(a) > int(self.getStockNum(x)))
a = self.getStockNum(x)
except ValueError:
pass
def testShengXu(self):
"""测试自选页面升序排列"""
num = self.getLength() - 1
self.clickNameNum()
self.clickNameNum()
a = 0
for x in range(num):
try:
int(self.getStockNum(x))
self.assertTrue(int(a) < int(self.getStockNum(x)))
a = self.getStockNum(x)
except ValueError:
pass
我自己的代码大概是这样的。
2、你的 pageobject 不够抽象,感觉还是过程式的代码
我也是这么觉得的,所以才想请教一下这部分要怎么处理
3、可以增加 Action 层,把常用的点击流程封装起来
这部分我是这么处理的
def clickHangQing(self):
"""
点击导航栏的行情按钮
:return: None
"""
self.find_element(*self.native_hangqing).click()
def clickEditSelect(self):
"""
点击编辑自选,进入编辑自选页面
:return: None
"""
self.find_elements(*self.edit_select)[0].click()
def clickFindStock(self):
"""
点击放大镜,进入查询自选股界面
:return: None
"""
self.find_elements(*self.edit_select)[1].click()
def clickZiXuan(self):
"""
点击行情页面的自选
:return: None
"""
if self.get_title() != u'行情':
try:
self.clickHangQing()
except Exception as e:
print e
print '行情导航栏无法点击,请检查APP的状态'
else:
self.find_element(*self.zixuan).click()
但是感觉耦合性还是比较差。
好吧,我好像是第二个填的
非常期待,周末时间太少了,没办法来看直播,好可惜,还好有视频,希望有一个周末我也可以安静的坐下来看直播
看完了我只能说佩服,今年 26.希望在 33 的时候也能和达到这样的高度
赞,回复 mark,抽空学习一下
请使用微信扫描二维码以登录
成功扫描,请在手机上点击确认以登录
正在登录...
通讯录共 97 位好友
开始查找...
[ ########## ] (当前,你被 2 人删除,好友共 97 人
---------- 被删除的好友列表 ----------
追梦
阿奔
回车键结束
还是有 BUG 的,统计的明显不正确
#10 楼 @hxhapppppy 恩恩,互相学习