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

今天SZ有雨,整个上午看着外面都是云很多,很大,所以我又变成‘死机’状态。最近是真的服了,好像觉比以前多很多,一直睡不醒。下午可算是清醒点。不过跑app脚本也真的奇怪了,同一份脚本换2个手机就死活执行不了,我真的要疯。

一)元素定位elements
在写用例的时候,定位最常用的是driver.find_element_by_id()、driver.find_element_by_xpath()、self.driver.find_element_by_id()、self.driver.find_elements_by_css_selector()、self.driver.find_element_by_class_name();但有时候 遇到相同id或者相同classname的情况,元素定位本就是想用唯一属性来定位的,遇到这样的情况我一般是 先看有没有其他唯一属性(例如 text属性不同,使用driver.find_element_by_android_uiautomator(‘text(“xxxx”)’)就可以搞定)

接触一段时间的find_element(),联想到会不会有find_elements()。
没错,推荐的是driver.find_elements()
elements方法是复数,定位到的是一组元素list,返回的是列表;其实质可以理解为 先把相同属性的元素找出来,取对应的第几个就可以了。

这儿是封装的一个方法:传入参数包括–定位的方式、元素定位的属性值、所在位置

    def xin_find_elements(self, by, locator, num):
        if by in [By.CLASS_NAME, By.ID, By.XPATH]:
            WebDriverWait(self.driver, 10, 0.3).until(EC.visibility_of_element_located((by, locator)))
            return self.driver.find_elements(by, locator)[num]
        else:
            print('定位方式不推荐')
            raise NameError("cuo")

再解释下:所在位置,因为这个是list,所以要从0开始;有一个很容易混的是 app某些元素的属性是同样的class xpath定位标签是【1】【2】
举例:
fu_zi_caini_xpath = ‘//[@resource-id=“like_more”]/android.widget.RelativeLayout/android.widget.TextView[1]’
fu_zi_gengduo_xpath = '//
[@resource-id=“like_more”]/android.widget.RelativeLayout/android.widget.TextView[2]’

很多元素定位方式,为什么我这只写By.CLASS_NAME, By。ID, By.XPATH? 我喜欢咋写就咋写 = =

实际class name 和id 很多是可以用find_elements();但是为什么加上xpath,就举例上面的
可修改为:
fu_zi_xpath = ‘//*[@resource-id=“like_more”]/android.widget.RelativeLayout/android.widget.TextView’
caini_num = 0 和 gengduo_num = 1

下面是一个用例

    def test_03_d482d(self):
        self.wodehuodong()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_id).click()
        self.xin_find_elements(By.ID, self.wode_jinruqunliao_shezhi_jia_id, 1).click()
        self.xin_find_element(By.ID, self.wode_jinruqunliao_shezhi_jian_xuanze_id).click()

二)九宫格 move_to()
九宫格 我没有实践过。move_to()里面传入的x,y是 相对坐标?绝对坐标?

moveTo(WebElement ele)
以ele为目标,从另一个点移动到该目标上

moveTo(int x, int y)
以(x,y)点为目标,从另一个点移动到该目标上

moveTo(WebElement ele, int x, int y)
以控件ele的左上角为基准,x轴向右移动x单位,y轴向下移动y单位。以该点为目标,从另一个点移动到该点上。

这是我找到资料,我暂时还不能下结论,因为网上其他人的教程和朋友实践的结果正是相对、绝对坐标两个完全不同的结果。待我有空,试一试 再分享。

猜你喜欢

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