0927Appium app自动化测试经验分享

今天基本写完DDM的二级目录(APP大模块下面一级的实际操作),但是再细致写下去就想死。
DDM这个app功能太多了,用起来太复杂,最近又会改动极大,天天一开会就个把小时,不开心。但是我抢到了回老家的票,虽然不太满意,但能够回家就开心。

二)TouchAction类

Appium的辅助类,主要针对手势操作,比如滑动、长按、拖动等。未方便区分、记忆,特别写在前面,手机端就是智能手机的操作,touch,故而就是TouchActions;

第一步 from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.common.touch_actions import TouchActions
appium是app端的自动化,它继承了webdriver(也就是selenium 2)。也是可以导入的。
推荐 appium导入TouchAction;

还有一个最常用的swipe滑动操作,情景包括:用于app第一次打开时候的引导页的操作、地图类app的滑动、某些资讯app下拉和上拉刷新。目前我接触的,我是这样处理的。

一)ActionChains是针对PC端程序鼠标操作 模拟的类。

其实最简单的操作click点击就属于其中一种,太常用,反而这儿来说就是那些不是很常用的,包括 双击、悬停(百度首页 右上角的设置、更多产品)、右击 (其他都没遇到过 就不涉及)

perform() 执行所有ActionChains中的行为。 当你调用ActionChains的方法时,不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,队列中的时间会依次执行。

第一步 from selenium.webdriver.common.action_chains import ActionChains()
第二步 ActionChains(driver).move to element(XXXX).perform() 悬停 XXXX代表定位的元素
ActionChains(driver).context_click(XXXX).perform() 右键
Actionchains(driver).double_click(XXXXX).peiform() 双击
ActionChains(driver).drag_and_drop(A ,B).perform() 拖动

这些是我觉得可能常用的,我写的公司运营系统(web)只用到点点点click 上面的一个都没有真实实践过。

只有一种情景写过类似:百度搜索 输入内容的时候,双击 会选中所有已输入的内容,后面你可以使用Home键 跳到前面再继续输入内容。
driver.find_element_by_id(“kw”).send_keys(u’百度’)
youji = driver.find_element_by_id(“kw”)
ActionChains(driver).context_click(youji).perform() # 搜索框 跳到最前面 加‘一下’
youji.send_keys(Keys.HOME, u’一下’)

三)xpath的定位实际运用

先父类后子类://XXXXX/xxxxx 主要是先定到父类,再来定位子类
举例:
paishe_fu2_id = ‘capture_layout_v3’ 父类的id定位
paishe_fu2_xpath = ‘//XXXX[@resource-id=“capture_layout_v3”]’ 父类的xpath定位
paishe_fu2_fanhui_xpath = ‘//XXXX[@resource-id=“capture_layout_v3”]/XXXX’ 定位子类A
paishe_fu2_pai_xpath = ‘//XXXX[@resource-id=“capture_layout_v3”]/XXXX’ 定位子类B

一般xpath定位可用到 :
1.只存在text,且唯一,则直接用text,其Xpath为://XXXX[@text=XXXX]
2.只存在content-desc,且唯一,则直接用content-desc,其Xpath为://XXXX[@content-desc=XXXX]
3.属性很多, 假设有三个 可以三者取其二或者取其三能唯一定位 //XXXX[@resource-id=“abc” and @text=“xyz” and @content-desc=“def”]
4.寻找其父节点,直到找到唯一(可以定位到的)。再从其父节点开始,取绝对路径(元素索引),加起来定位那个子节点;(上面已举例)

四)python的切片 split() 方法----返回分割后的字符串列表。

举例:
key = locator.split(’ ‘)[0]
value = locator.split(’ ')[1]
空格 为分隔符
saoyisao_loc = ‘id saoyosao_iv’ # 扫一扫
rechange_loc = ‘id home_rechange’ # 充值

这样的用法是 把下面的locator的值 分为前面的id为 key;实际定位的id的值 是value;
if key == ‘id’:
WebDriverWait(self.driver, 10).until(lambda the_driver:the_driver.find_element_by_id(value).is_displayed())
这是做显式等待的时候,分割出来你定位元素By的方式,后面跟的是value;

但我不这样写。我一般直接定位的时候:
ouyu_fanhui_id = ‘menu_one’
ouyu_ziliao_id = ‘menu_three’
ouyu_saixuan_id = ‘condition’
元素前面是模块+名字,后面是定位方式;

用例是这样写的:
self.xin_find_element(By.。ID, self.ouyu_saixuan_id).send_keys(self.shoujihaoma)
self.xin_find_element(By。ID, self.ouyu_fanhui_id).click()
重点我已经标注By。ID,前面是传递了这个定位元素的方式,后面是值

五)字符串的截取,始终是记不住。学了好几遍了,心累

python的字串列表有2种取值顺序
1.是从左到右索引默认0开始的,最大范围是字符串长度少1
2.是从右到左索引默认-1开始的,最大范围是字符串开头

str = ‘0,1,2,3,4 。。。-4,-3,-2,-1’
左边的开始是包含了下边界,而取到的最大范围不包括上边界
str[-3:-1] # 截取倒数第三位与倒数第二位的字符
str[0:3] # 截取第一位到第三位的字符

str[-3:] # 截取倒数第三位到结尾
str[:] # 截取字符串的全部字符

str[2] # 截取第三个字符
str[-1] # 截取倒数第一个字符

明天看我能不能再细致学学TouchAction,弄清楚perform和release怎么使用

猜你喜欢

转载自blog.csdn.net/zyooooxie/article/details/82872406