Ejemplo n.º 1
0
 def init_to_home(self):
     '''滑动引导页进入登录页面,登录进入首页'''
     try:
         mobile = get_yaml_value(TEST_ACCOUNT_PATH, 'account_1')
         pwd = get_yaml_value(TEST_ACCOUNT_PATH, 'pwd_1_right')
         StartPage(self.driver).swipe_start()
         lp = LoginPage(self.driver)
         lp.login_opera(mobile, pwd)
         time.sleep(1)
         # 判断是否登录成功
         if lp.is_exist_element(self.update_ele):
             log.info("登录成功,进入首页...")
             self.update_cancel_opera()
             # 判断是否存在通知弹窗
             if lp.is_exist_element(self.cancel_el):
                 self.notice_cancel_opera()
                 # 判断是否存在"知道了"
                 if lp.is_exist_element(self.iknow_ele):
                     self.iknow_click_opera()
                 else:
                     pass
         elif lp.is_exist_element(self.cancel_el):
             log.info("登录成功,进入首页...")
             self.notice_cancel_opera()
         elif lp.is_exist_element(self.iknow_ele):
             log.info("登录成功,进入首页...")
             self.iknow_click_opera()
         elif lp.is_exist_element(self.home_ele):
             log.info("登录成功,进入首页...")
             pass
         else:
             log.error("初始化登录失败,终止自动化程序!!!")
             sys.exit(0)
     except Exception as e:
         log.error("进入首页失败:{}".format(e))
Ejemplo n.º 2
0
    def android_driver(self):
        '''Android driver'''

        # 从desired_caps.yaml读取driver配置数据
        stream = open(DESIRED_CAPS_YAML_PATH, 'r')
        data = yaml.load(stream, Loader=yaml.FullLoader)

        desired_caps = {}
        desired_caps['platformName'] = data['platformName']
        desired_caps['platformVersion'] = data['platformVersion']
        desired_caps['deviceName'] = data['deviceName']
        desired_caps['udid'] = data['udid']
        desired_caps['appPackage'] = data['appPackage']
        desired_caps['appActivity'] = data['appActivity']
        desired_caps['noReset'] = data['noReset']
        desired_caps['unicodeKeyBoard'] = True
        desired_caps['resetKeyboard'] = True
        desired_caps['automationName'] = data['automationName']

        # 设置收到下一条命令的超时时间,超时appium会自动关闭session ,默认60秒
        desired_caps['newCommondTimeout'] = data['newCommondTimeout']

        try:
            driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps)
            driver.implicitly_wait(8)
            log.info("驱动app打开成功...")
            return driver
        except Exception as e:
            log.error("驱动app打开失败:{}".format(e))
Ejemplo n.º 3
0
    def get_apk_info(self):
        '''获取apk包的appPackage、启动类appActivity'''
        mac_aapt_path = '/Users/mac/Downloads/android-sdk-macosx/build-tools/29.0.3/'
        aapt_command_base = 'aapt dump badging '
        app_path = self.get_apk_path()

        try:
            # mac获取方法
            # p = subprocess.Popen(mac_aapt_path+aapt_command_base+app_path, stdout=subprocess.PIPE,
            #                              stderr=subprocess.PIPE,
            #                              stdin=subprocess.PIPE,
            #                              shell=True)
            # windows获取方法
            p = subprocess.Popen(aapt_command_base + app_path,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 stdin=subprocess.PIPE,
                                 shell=True)
            (output, err) = p.communicate()
            t = output.decode()
            # print(t)
            match_appPackage = re.compile("package: name='(.*?)'").search(t)
            match_apkActivity = re.compile(
                "launchable-activity: name='(.*?)'").search(t)
            appPackage = match_appPackage.groups()[0]
            appActivity = match_apkActivity.groups()[0]
            # print(appPackage)
            # print(appActivity)
            log.info("获取被测apk包的appPackage、appActivity成功...")
            return appPackage, appActivity
        except Exception as e:
            log.error("获取被测apk包的appPackage、appActivity失败:{}".format(e))
Ejemplo n.º 4
0
 def start_appium(self):
     '''启动appium服务'''
     try:
         os.system('start appium -a 127.0.0.1 -p 4723')
         time.sleep(5)
         log.info("启动appium服务...")
     except Exception as e:
         log.error("appium启动失败:{}".format(e))
Ejemplo n.º 5
0
 def get_clickable_element(self, locator, timeout=20):
     '''获取可点击元素'''
     try:
         return WebDriverWait(self.driver, timeout).until(
             ec.element_to_be_clickable(locator))
     except Exception as e:
         Screenshots(self.driver, "获取可点击元素失败").screen_shot()
         log.error("可点击元素获取失败:{}".format(e))
Ejemplo n.º 6
0
 def get_presence_element(self, locator, timeout=20):
     '''获取存在元素'''
     try:
         return WebDriverWait(self.driver, timeout).until(
             ec.presence_of_element_located(locator))
     except Exception as e:
         Screenshots(self.driver, "获取存在元素失败").screen_shot()
         log.error("获取存在元素失败:{}".format(e))
Ejemplo n.º 7
0
 def uninstall_app(self):
     '''卸载App基本方法'''
     try:
         log.info("开始卸载应用{}...".format(self.appName))
         result = os.popen(self.uninstall_command).read()
         if "Success" in result:
             log.info("应用卸载成功...")
     except Exception as e:
         log.error("应用卸载失败:{}".format(e))
Ejemplo n.º 8
0
 def install_app(self):
     '''安装App基本方法'''
     try:
         log.info("正在安装应用{},请稍后...".format(self.appName))
         result = os.popen(self.install_command).read()
         if "Success" in result:
             log.info("{}应用安装成功...".format(self.appName))
     except Exception as e:
         log.error("应用安装失败:{}".format(e))
Ejemplo n.º 9
0
def get_yaml_value(p, k):
    '''获取yaml文件中key对应的值'''
    try:
        with open(p, 'r', encoding='utf-8') as f:
            cont = yaml.load(f.read(), Loader=yaml.RoundTripLoader)
            val = cont[k]
        return val
    except Exception as e:
        log.error("获取{}对应的值失败:{}".format(k, e))
Ejemplo n.º 10
0
 def get_text_element(self, text, timeout=20):
     '''通过text定位元素'''
     try:
         text_loc = (By.XPATH, "//*[@text=\'{}\']".format(text))
         return WebDriverWait(self.driver, timeout).until(
             lambda driver: self.driver.find_element(*text_loc))
     except Exception as e:
         Screenshots(self.driver, "通过text获取元素失败").screen_shot()
         log.error("通过text获取元素失败:{}".format(e))
Ejemplo n.º 11
0
 def get_deviceName(self):
     '''获取连接设备的设备名deviceName'''
     try:
         result = os.popen(self.deviceName_command).read()
         deviceName = result.split('\n')[0]
         # print(deviceName)
         log.info("获取设备名成功...")
         return deviceName
     except Exception as e:
         log.error("获取设备名失败:{}".format(e))
Ejemplo n.º 12
0
 def get_platformVersion(self):
     '''获取连接设备的系统版本号platformVersion'''
     try:
         result = os.popen(self.platformVersion_command).read()
         platformVersion = result.split('\n')[0]
         # print(platformVersion)
         log.info("获取设备系统版本号成功...")
         return platformVersion
     except Exception as e:
         log.error("获取系统版本号失败:{}".format(e))
Ejemplo n.º 13
0
 def new_is_exist_element(self, text, timeout=20):
     '''
     重新封装,判断元素是否存在
     text: 元素的文本
     '''
     sleep(2)
     try:
         text_loc = (By.XPATH, "//*[@text=\'{}\']".format(text))
         WebDriverWait(self.driver, timeout).until(
             ec.visibility_of_element_located(text_loc))
         return True
     except Exception as e:
         Screenshots(self.driver, "text获取失败").screen_shot()
         log.error("text获取失败:{}".format(e))
         return False
Ejemplo n.º 14
0
 def get_udid(self):
     '''获取设备udid。输出所有已连接电脑的android devices,去掉输出中无用的字符串,只保留devices SN'''
     devices_list = []
     result = os.popen(self.udid_command).readlines()
     # print(result)
     list_len = len(result)
     if list_len == 2:
         log.error("没有测试设备连接,结束!!!")
         sys.exit(0)
     else:
         for i in range(list_len):
             if result[i].find('\t') != -1:
                 devices_list.append(result[i].split('\t')[0])
     # print(devices_list)
     # 返回第一个udid(通常只有一台设备进行测试)
     return devices_list[0]
Ejemplo n.º 15
0
    def get_apk_path(self):
        '''获取app文件的完整路径'''

        # 获取app文件夹中的所有apk文件名
        package_list = os.listdir(APP_PATH)

        # 判断app中apk文件的个数并选择
        num = len(package_list)
        if num == 0:
            log.error("未添加需要测试的apk文件!!!")
            sys.exit(0)
        elif num == 1:
            apk_path = APP_PATH + package_list[0]
        elif num >= 2:
            print(package_list)
            index = int(input("请输入要测试的包名的编号(从0开始):"))
            apk_path = APP_PATH + package_list[index]
        # print(apk_path)
        return apk_path
Ejemplo n.º 16
0
 def init_to_home(self):
     '''滑动引导页进入登录页面,登录进入首页'''
     try:
         mobile = get_yaml_value(TEST_ACCOUNT_PATH, 'account_1')
         pwd = get_yaml_value(TEST_ACCOUNT_PATH, 'pwd_1_right')
         StartPage(self.driver).swipe_start()
         lp = LoginPage(self.driver)
         lp.login_opera(mobile, pwd)
         time.sleep(2)
         # 判断是否登录成功,不成功则再进行一次判定操作
         result = self.is_login_success()
         if result:
             log.info("登录成功,进入首页...")
         else:
             time.sleep(2)
             result_2 = self.is_login_success()
             if result_2:
                 log.info("登录成功,进入首页...")
             else:
                 log.error("初始化登录失败,终止自动化程序!!!")
                 # sys.exit(0)
     except Exception as e:
         log.error("进入首页失败:{},终止用例执行!!!".format(e))
         sys.exit(0)