• 搞搞京东读书


    import time
    from appium import webdriver

    desired_caps = {}
    desired_caps['platformName'] = 'Android' # android的apk还是IOS的ipa
    desired_caps['platformVersion'] = '4.4.2' # android系统的版本号
    desired_caps['deviceName'] = '127.0.0.1:62001' # 手机设备名称,通过adb devices 查看
    desired_caps['appPackage'] = 'com.jd.app.reader' # apk的包名
    desired_caps['appActivity'] = 'com.jingdong.app.reader.logo.JdLogoActivity' # apk的launcherActivity
    desired_caps['unicodeKeyboard'] = True # 使用unicodeKeyboard的编码方式来发送字符串
    desired_caps['resetKeyboard'] = True # # 将键盘给隐藏起来
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) ##启动服务器地址,后面跟的是手机信息

    # 跳过广告页:
    button = driver.find_element_by_id("com.jd.app.reader:id/count_down_time")
    print(111, button)
    button.click()

    # 休眠:
    # time.sleep(10)

    # 点击书城:
    driver.find_element_by_android_uiautomator('new UiSelector().text("书城")').click()

    time.sleep(10)

    # # 找有声推荐框:
    res1 = driver.find_element_by_class_name("android.widget.ListView")
    print(222, res1)

    # 休眠:
    time.sleep(10)

    # 找到每个小框:
    res2 = res1.find_element_by_class_name("android.widget.Image")
    print(333, res2)

    # 休眠:
    # time.sleep(10)

    # 点击:
    # res2.click()

    # 点击顶部的输入框
    driver.find_element_by_id('com.jd.app.reader:id/mSearchLayout').send_keys()
    time.sleep(1)

    # 在新的搜索页面输入值
    driver.find_element_by_id('com.jd.app.reader:id/mSearchKeyInput').send_keys('上古卷轴')
    time.sleep(1)

    # 有了值,就可以点击搜索按钮进行搜索
    driver.find_element_by_id('com.jd.app.reader:id/mSearchBtn').click()

    # 隐式等待
    driver.implicitly_wait(10)

    driver.find_element_by_id('com.jd.app.reader:id/main_tab_bookshelf').click()

    # 显式等待,直到找到了这个标签
    WebDriverWait(driver, 10).until(driver.find_element_by_id('com.jd.app.reader:id/main_tab_bookcity'))
    driver.find_element_by_id('com.jd.app.reader:id/main_tab_bookcity').click()

    # 截屏:
    try:
    # 根据一个不存在的 id 定位
    driver.find_element_by_id("xxxxxxxxx").click()
    except Exception as e:
    print(e) # Message: An element could not be located on the page using the given search parameters.
    driver.save_screenshot('./error.png')


    # 滑动:driver.swipe
    def swipeUp(driver, t=500, n=1):
    '''向上滑动屏幕'''
    l = driver.get_window_size()
    x1 = l['width'] * 0.5 # x坐标
    y1 = l['height'] * 0.75 # 起始y坐标
    y2 = l['height'] * 0.25 # 终点y坐标
    for i in range(n):
    driver.swipe(x1, y1, x1, y2, t)

    def swipeDown(driver, t=500, n=1):
    '''向下滑动屏幕'''
    l = driver.get_window_size()
    x1 = l['width'] * 0.5 # x坐标
    y1 = l['height'] * 0.25 # 起始y坐标
    y2 = l['height'] * 0.75 # 终点y坐标
    for i in range(n):
    driver.swipe(x1, y1, x1, y2, t)

    def swipLeft(driver, t=500, n=1):
    '''向左滑动屏幕'''
    l = driver.get_window_size()
    x1 = l['width'] * 0.75
    y1 = l['height'] * 0.5
    x2 = l['width'] * 0.25
    for i in range(n):
    driver.swipe(x1, y1, x2, y1, t)

    def swipRight(driver, t=500, n=1):
    '''向右滑动屏幕'''
    l = driver.get_window_size()
    x1 = l['width'] * 0.25
    y1 = l['height'] * 0.5
    x2 = l['width'] * 0.75
    for i in range(n):
    driver.swipe(x1, y1, x2, y1, t)

    if __name__ == '__main__':
    time.sleep(4)
    swipLeft(driver, n=2)
    time.sleep(4)
    swipRight(driver, n=2)
    time.sleep(4)
    swipeUp(driver, n=2)
    time.sleep(4)
    swipeDown(driver, n=2)

    # 尺寸:
    print(driver.get_window_size()) # {'width': 720, 'height': 1280}
    print(driver.get_window_size()['width']) # 720
    print(driver.get_window_size()['height']) # 1280

    # 触摸操作:TouchAction
    class TouchAction(object):
    def __init__(self, driver=None):
    self._driver = driver
    self._actions = []

    def tap(self, element=None, x=None, y=None, count=1):
    # 模拟手指触摸屏
    pass

    def press(self, el=None, x=None, y=None):
    # 短按:模拟手指按住一个元素,或者坐标
    pass

    def long_press(self, el=None, x=None, y=None, duration=1000):
    # 长按:模拟按住一个元素,或者坐标
    pass

    def wait(self, ms=0):
    # 按住元素后的等待时间
    pass

    def move_to(self, el=None, x=None, y=None):
    # 移动手指到另外一个元素,或者坐标,注意这里坐标不是绝对坐标,是偏移量
    pass

    def release(self):
    # 释放手指
    pass

    def perform(self):
    # 执行前面的动作
    pass

    # 九宫格示例:Z形滑动

    # 多点触控:MultiAction
  • 相关阅读:
    程序员常见的坏习惯,你躺枪了吗?
    程序员常见的坏习惯,你躺枪了吗?
    程序员常见的坏习惯,你躺枪了吗?
    ACM2037
    [Golang]字符串拼接方式的性能分析
    如果一个类同时继承的两个类都定义了某一个函数会怎样呢 | Code4Fun
    Python学习笔记(四)函数式编程
    MySql之增删改查 · YbWork's Studio
    季銮西的博客
    ActiveMQ学习总结(一)
  • 原文地址:https://www.cnblogs.com/zhang-da/p/12364722.html
Copyright © 2020-2023  润新知