chzhiyi / -KnowledgeShare

6 stars 1 forks source link

20190522 - appium的常用API - yinshuang #74

Open yinshuang214 opened 5 years ago

yinshuang214 commented 5 years ago

*appium的常用API

获取控件类API

1.find_element_by_id 通过元素的ID定位元素

用法 driver. find_element_by_id(“id”)

2.find_elements_by_id 通过元素ID定位,含有该属性的所有元素

用法 driver. find_elements_by_id(“id”)

  1. find_element_by_name 通过元素Name定位(元素的名称属性text)

用法 driver.find_element_by_name(“name”)

4.find_elements_by_name 通过元素Name定位(元素的名称属性text),含有该属性的所有元素

用法 driver.find_element_by_name(“name”)

5.find_elements_by_xpath 通过元素的xpath定位元素

用法find_elements_by_xpath(“//*”)

6.find_element_by_accessibility_id 通过accessibility id查找元素

用法driver.find_element_by_accessibility_id(‘id’)

元素操作类API

1.点击事件 click() tap() click和tap都能实现单击的效果。其区别在于click是作用于driverelement的实例化对象,而tap是对屏幕上的坐标位置进行点击。前者对元素的位置变化并不敏感,而后者是针对具体的像素坐标点击,受分辨率和元素位置影响较大。 2.输入事件 send_keys() set_text() send_keys和set_text也都能满足输入文本内容的操作。其区别在于send_keys会调用设备当前系统输入法键盘,而set_text直接对目标元素设置文本。由此可推,send_keys的输入内容往往和预期内容不一致,而set_text的输入则是直接赋值,并不是键盘事件。 3.滑动(翻屏)事件 swipe() flick() swipe和flick都是滑动操作,它们都是从[start_x, start_y]划到[end_x, end_y]的过程,唯一不同的是swipe比flick多了一个duration参数,有了这个参数就可以自定义从start到end动作的作用时间,以达到快速滑动或者慢速滑动的效果。 4.缩放事件 pinch() zoom() 默认会对目标元素进行放大一倍或者缩小一半的操作,此api方法适合于在测试运动地图的缩放时的变化。 5.长按事件 long_press() 长按方法是在TouchAction类中,所以在使用时需要先import TouchAction。在删除运动历史记录时,在记录列表长按删除

元素事件类API

  1. reset reset() 用法:driver.reset(),重置应用(类似删除应用数据),如首次登录app时出现的引导页,则可以用reset来实现需求。

2.is_app_installed is_app_installed() 检查app是否有安装 返回 True or False。例如:在微信登录时,选择登录方式时会判断是否已安装微信,若未安装则有dialog弹框,已安装则跳转到微信登录页面

3.install_app install_app() 接上个例子,若未安装微信出现dialog弹框,检查完dialog后再安装微信app。特别说明:例子中的"weixin.apk"是指app_path

  1. remove_app remove_app() 在测试老版本兼容用例时,用老版本替换新版本时,需要卸载新版本,再安装老版本,所以需要调用到此方法, driver.remove_app("new_app.apk") # 卸载 driver.install_app("old_app.apk") # 安装

5.launch_app launch_app() 打开一个capabilities配置的设备应用。此方法目前并没有使用。待以后用到时再来做更新。

6.close_app close_app() 关闭app应用程序。此方法常用在代码末尾,在清理和释放对象时使用。结合unittest框架常见tearDown()里使用

以下是我的代码演示:

coding=utf-8
from datetime import time

from appium import webdriver
from time import sleep
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction

def getSize():
    pass

class Login:

    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '4.4.4'
    desired_caps['deviceName'] = '79KR8PU8SOLV79B6'
    desired_caps['appPackage'] = 'cn.zhimawu'
    desired_caps['appActivity'] = 'cn.zhimawu.SplashActivity'
    driver = webdriver.Remote( 'http://localhost:4723/wd/hub', desired_caps, keep_alive=True )

    driver.implicitly_wait(10000)

    def userlogin(self):

        self.driver.find_element_by_id("cn.zhimawu:id/login").click()
        self.driver.find_element_by_id("cn.zhimawu:id/editPhone").send_keys("123213sdwe")

        self.driver.find_element_by_id("cn.zhimawu:id/editPhone").clear()
        self.driver.find_element_by_id("cn.zhimawu:id/editPhone").send_keys("15811055793")
        self.driver.find_element_by_id("cn.zhimawu:id/edit_pwd").set_text("1234qwer")

        self.driver.tap([(498, 942)], 1000) 
        self.driver.find_element_by_id("cn.zhimawu:id/i_dont_like_this").click()

        self.driver.implicitly_wait(10000)
        x=self.driver.get_window_size()['width']
        y=self.driver.get_window_size()['height']
        self.driver.implicitly_wait(10000)
        print(self.driver.get_window_size())

        # self.driver.flick(x * 3 / 4, y / 2, x / 10, y / 2)# 屏幕向左滑动,y轴不变,x轴从大变小
        # self.driver.swipe(x * 3 / 4, y / 2, x / 10, y / 2,  10000)
   #self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.view.ViewPager/android.widget.RelativeLayout/android.widget.LinearLayout/android.support.v7.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.RelativeLayout/android.widget.ImageView").click()
        #self.driver.find_element_by_id("cn.zhimawu:id/tv_unuse").click()
        #self.driver.implicitly_wait(10000)

        # 11.is_app_installed:检查app是否有安装 返回 True or False
        # if self.driver.is_app_installed("cn.zhimawu"):
        #     print("已安装河狸家app")
        # else:
        #     print("未安装")

        #12.long_press长按事件
        self.driver.tap([(536, 1813)], 1000)
        action1 = TouchAction(self.driver)
        self.driver_element =self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[5]/android.widget.RelativeLayout")
        action1.long_press(self.driver_element).wait(2 * 1000).perform() # 2为长按控件的时间,单位秒

        # Shake the device(摇一摇手机 )用法 driver.shake()
        #self.driver.shake()

        # 退出脚本运行并关闭每个相关的窗口连接用法: driver.quit()
        #self.driver.quit()

        # 关闭当前窗口
        # self.driver.close()
        # 关闭app应用程序
        self.driver.close_app()

if __name__ == '__main__':
    login = Login()
    login.userlogin()

    # for i in range(3):
    #     login.pinch()
    #
    # for i in range(3):
    #     login.zoom()