• python+appium


    #案例:python+appium的一个复杂案例!
    from appium import webdriver
    import time
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    from appiumUtils import click_select
    from appiumUtils import  caozuoEleNotScreen


    # server 启动参数
    desired_caps = {}
    # 设备信息
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '5.1.1'
    desired_caps['deviceName'] = '127.0.0.1:62001'
    # 指定要操作某app的某UI
    desired_caps['appPackage'] = 'com.android.contacts'
    desired_caps['appActivity'] = '.activities.PeopleActivity'
    desired_caps['noReset']=True

    #指定Appium服务器的ip和端口
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    #定位元素“+”,并点击
    driver.find_element_by_id("com.android.contacts:id/floating_action_button").click()

    time.sleep(3)
    #定位元素“姓名”,并输入
    driver.find_element_by_xpath("//*[@text='姓名']").send_keys("张三")

    #定位元素“电话”,并输入
    driver.find_element_by_xpath("//*[@text='电话']").send_keys("13760453683")
    #定位元素下列列表“电话类型”,并点击,目的是为了让下列列表展开!
    ele_select_phoneType=driver.find_element_by_xpath("//*[@text='手机']")
    ele_select_phoneType.click()
    #点击展开后的下列列表中的某选项
    loc_select=By.CLASS_NAME,"android.widget.ListView"
    loc_option=By.XPATH,"//*[@text='助理']"
    click_select(driver,loc_select,loc_option)

    time.sleep(3)
    #定位元素“电子邮件”,并输入
    driver.find_element_by_xpath("//*[@text='电子邮件']").send_keys("851286894@qq.com")

    #选择“电子邮件”类型
    driver.find_element_by_xpath("//*[@text='个人']").click()
    loc_select1=By.CLASS_NAME,"android.widget.ListView"
    loc_option1=By.XPATH,"//*[@text='工作']"
    click_select(driver,loc_select1,loc_option1)

    time.sleep(2)
    #定位元素“地址”,并输入
    loc_addr=By.XPATH,"//*[@text='地址']"
    caozuoEleNotScreen(driver,loc_addr,dict="up",caozuoType="input",data="深圳市南山区XXX小区")


    #定位元素“公司”,并输入
    loc_company=By.XPATH,"//*[@text='公司']"
    caozuoEleNotScreen(driver,loc_company,dict="up",caozuoType="input",data="深圳哇哈哈集团")

    #定位元素“聊天软件号码”,并输入
    loc_qqHaoma=By.XPATH,"//*[@text='聊天工具']"
    caozuoEleNotScreen(driver,loc_qqHaoma,dict="up",caozuoType="input",data="851286894")

    #选中“聊天软件”
    loc_AIM=By.XPATH,"//*[@text='AIM']"
    caozuoEleNotScreen(driver,loc_AIM,dict="up",caozuoType="click",data=None)
    loc_select2=By.CLASS_NAME,"android.widget.ListView"
    loc_option2=By.XPATH,"//*[@text='ICQ']"
    click_select(driver,loc_select2,loc_option2)

    #定位元素“网站”,并输入
    loc_website=By.XPATH,"//*[@text='网站']"
    caozuoEleNotScreen(driver,loc_website,dict="up",caozuoType="input",data="http://wahaha.com")

    #定位元素“保存”按钮,并点击
    driver.find_element_by_class_name("android.widget.ImageButton").click()

    #断言:断言逻辑:保存后UI中用户名是"张三"
    time.sleep(3)
    ele_yonhumin=driver.find_element_by_id("com.android.contacts:id/large_title")
    attr_text=ele_yonhumin.text
    if attr_text=="张三":
        print("成功")
    else:
        print("失败")


    time.sleep(5) #休眠5秒
    driver.quit()

    工具类

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.common.by import By

    #函数功能:滑动一次(滑动幅度:小0.5屏)!
    #形参dict:String,表示滑动的方向。"up":上滑;"down":下滑。"left":左滑。"right":右滑!
    def huadonOne(driver,dict="up"):
        w = driver.get_window_size()["width"]
        h = driver.get_window_size()["height"]
        if dict=="up":
            start_x = 0.5 * w
            start_y = 0.75 * h
            end_x = 0.5 * w
            end_y = 0.25 * h
            driver.swipe(start_x, start_y, end_x, end_y, duration=5000)
        elif dict=="down":
            start_x = 0.5 * w
            start_y = 0.25 * h
            end_x = 0.5 * w
            end_y = 0.75* h
            driver.swipe(start_x, start_y, end_x, end_y, duration=5000);
        elif dict=="left":
            start_x = 0.75 * w
            start_y = 0.5 * h
            end_x = 0.25 * w
            end_y = 0.5 * h
            driver.swipe(start_x, start_y, end_x, end_y, duration=5000);
        elif dict=="right":
            start_x = 0.25 * w
            start_y = 0.5 * h
            end_x = 0.75 * w
            end_y = 0.5 * h
            driver.swipe(start_x, start_y, end_x, end_y, duration=5000);


    #函数功能:定位某元素,并操作该元素!
    #形参loc:表示你要定位的元素的定位特征!
    #形参dict:滑动方向!
    #形参caozuoType:指定对该元素如何操作!
    #形参data:如果是对该元素输入操作,data表示输入数据!
    def caozuoEleNotScreen(driver,loc,dict="up",caozuoType="click",data=None):
        while True:
            try:
                ele= WebDriverWait(driver, 10, 1).until(lambda x: x.find_element(loc[0], loc[1]))
                if caozuoType=="click":
                    ele.click()
                elif caozuoType=="input":
                    ele.send_keys(data)
                break
            except Exception:
                # 上滑
                huadonOne(driver, dict)

    #返回元素loc的w和h
    def getEleWAndH(driver,loc):
        # 获取元素“展开后的下列列表”的bounds属性
        ele=WebDriverWait(driver, 5, 1).until(lambda x: x.find_element(loc[0], loc[1]))
        attr_bounds = ele.get_attribute("bounds")  # "[[108,144][333,806]]"
        a = attr_bounds.replace("[", "")
        b = a.replace("]", ",")
        c = b.split(",", 4)
        x1 = int(c[0])
        y1 = int(c[1])
        x2 = int(c[2])
        y2 = int(c[3])
        w=x2-x1
        h=y2-y1
        return {"width":w,"height":h}

    #函数功能:点击下列列表中的某选项!
    def click_select(driver,loc_select,loc_option):
        # 定位展开后的下列列表
        ele_select= WebDriverWait(driver, 5, 1).until(lambda x:x.find_element(loc_select[0],loc_select[1]));
        # 定位元素下列列表“电话类型”中的某选项,并点击
        while True:
            try:
                ele_xuanxian_phoneTypeele = WebDriverWait(driver, 3, 1).until(
                    lambda x: x.find_element(loc_option[0],loc_option[1]))
                ele_xuanxian_phoneTypeele.click()
                break
            except Exception:
                # 上滑这个下列列表
                # 获取元素“展开后的下列列表”的bounds属性
                attr_bounds = ele_select.get_attribute("bounds")  # "[[108,144][333,806]]"
                a = attr_bounds.replace("[", "")
                b = a.replace("]", ",")
                c = b.split(",", 4)
                x1 = int(c[0])
                y1 = int(c[1])
                x2 = int(c[2])
                y2 = int(c[3])
                w = x2 - x1
                h = y2 - y1

                # 获取下列列表中滑动的起点和终点
                start_x = x1 + 0.5 * w
                start_y = y1 + 0.75 * h
                end_x = start_x
                end_y = y1 + 0.25 * h
                driver.swipe(start_x, start_y, end_x, end_y, duration=5000)

  • 相关阅读:
    最受欢迎的程序员副业排行榜TOP6
    【ChatIE】论文解读:Zero-Shot Information Extraction via Chatting with ChatGPT
    python如何导入不同目录下的包
    如何向客户推广 API 商品数据接口,如何跟进项目和程序员对接?
    HTML核心(5)- a元素
    程序员的七夕怎么过?不会是写代码吧
    Spring 中 Bean 对象的存储和取出
    前端点击获取验证码,进行60秒倒计时
    当以概念和噱头为主导的金融科技的发展模式彻底偃旗息鼓
    手机应用app打开游戏显示连接服务器失败是什么原因?排查解决方案?
  • 原文地址:https://blog.csdn.net/qq_40531965/article/details/125599267