回头借鉴下
# 本次多亏 @ 霍格沃兹 - 修然 指点
思路:控制前后,按钮中心坐标点的颜色不一致,利用此差异,来对比实现控制结果状态获取。
主要步骤:
先截屏保存,再通过获取控件坐标,计算出 中心坐标点 坐标值,然后使用 PIL 库 getpixel((x,y))
方法,获取控制前后的颜色值,数值不同即说明状态有变化,APP 端控制结果成功。代码只说明获取颜色值。
from PIL import Image
def test_linghuokaiguan(self):
'''
1,获取中心坐标点当前颜色状态值,如果前三个值为255,则说明为打开;如果前三个值为163,则说明为关闭
2,点击后,等待3s,再次获取该中心坐标点值,与点击前的值相比较,相同则说明打开成功(打开失败)
3,核对操作记录,进一步确认
'''
# APP启动后,等待房间元素可见,然后点击
WebDriverWait(self.driver, 10).until(lambda x: x.find_element(*TestDevice.room_btn)).click()
# 单开零火开关 快捷开关按钮可见
ele =WebDriverWait(self.driver, 10).until(lambda x: x.find_element(*TestDevice.zhinengdengdai))
time.sleep(3)
# 定义图片存放路径路径
image_file = os.path.join(base_dir, '234.png')
logging.info(base_dir)
# 截屏保存图片
self.driver.get_screenshot_as_file(image_file)
time.sleep(2)
# 计算控件坐标
left = ele.location.get('x')
logging.info(left)
top = ele.location.get('y')
logging.info(top)
width = ele.size['width']
logging.info(width)
height = ele.size['height']
logging.info(height)
# 中心点坐标
left_1 = width/2 + left
logging.info(left_1)
top_1 = height/2 + top
logging.info(top_1)
# 打开并标识给定的文件
img1 = Image.open(image_file)
# logging.info(img1.mode)
img_piexl= img1.getpixel((left_1,top_1))
logging.info(img_piexl)
'''
只是开发们都太懒 ,目前已经找到解决办法,通过控件的标记点位的颜色变化
你说的是坐标吗,控件可以定位到,问题是,点击按钮后,只有按钮颜色变了,控件坐标未变,这里用坐标实际可能不行,目前我已找到解决办法,就是控件的标记点位颜色变化
你的黑苹果什么版本,怎么安装的,都需要安装哪些软件
哪位大神指导是什么问题
确实如此,修改元素等待时,将固定等待修改为等待元素出现,元素名称忘了修改,太不细心了,非常感谢!
难道是递归?
我也用了 tap,和 click() 一样,日志显示已执行,但实际并未点击
问下,这个属性值是在哪个文件中,能截图出来吗,我的脚本出现这个问题,亟待解决
目前已经解决,是通过计算坐标、滑动固定距离解决的。
获取其他页面元素文本值,都还能获取到,只是这里获取时就只能获取到数字
试过了,这两个仍然只打印数字
多谢!
谢谢,已经成功了,swpie() 方法确实可用,解决了一大难题,这样的操作有很多。我之前用的是自己封装的滑动方法,没有精确计算坐标,只是比例计算,每次滑动都是一闪而过,再次感谢你提供的详细说明!
附上最新的滑动封装:
def swipeup_slight(self, n=1):
for i in range(n):
self.swipe(540, 1681, 540, 1591, 200)
谢谢,我试下
好的,多谢!
使用 TouchAction(driver).press(element1).move_to(x=0, y=-10).wait(1000).release().perform(),操作可以滑动,但是滑动量看起来很大,滑动的都看不见选项了,但是偏移量只有-10(向上滑动),方框的宽度是 90
坐标的话使用哪个方法,swipe,麻烦请具体写一下你的代码
计算坐标恐怕有局限
屏幕大小不一样,计算坐标恐怕有局限
先谢过,希望不要被淹没了,哪位高人指点下
你说的这个问题我之前也遇到过,有两个思路,因为是我遇到过的并且解决了:
1,很有可能是时间设置的太短了,建议你可以把时间改大之后再试,
2,或者是引用不对,如果是自己重新封装的滑动,引用时,直接 self.swipe() 即可,不用 self.driver.swipe()