class TestPlanetNotify(object): """小影圈通知页的测试类,分步截图.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_planet_notify_ui(self): """小影圈推荐页面初始状态测试.""" sc.logger.info('小影圈推荐页面初始状态检查开始') fun_name = 'test_planet_notify_ui' sc.logger.info('点击小影圈主按钮') p_btn = 'com.quvideo.xiaoying:id/img_find' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(p_btn)).click() sc.logger.info('开始查找小影圈消息中心图标') message_btn = 'com.quvideo.xiaoying:id/btn_message' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(message_btn)).click() time.sleep(3) sc.logger.info('小影圈推荐页面初始状态截图开始') sc.capture_screen(fun_name, self.img_path) def test_notify_info(self): """测试消息中心通知页.""" sc.logger.info('开始测试消息中心通知页.') fun_name = 'test_notify_info' start_x = self.width - self.width // 8 start_y = self.height // 2 time.sleep(1) sc.swipe_by_ratio(start_x, start_y, 'left', 0.7, 500) sc.logger.info('消息中心通知页截图') sc.capture_screen(fun_name, self.img_path) def test_notify_message(self): """测试消息中心动态.""" sc.logger.info('开始测试消息中心私信.') fun_name = 'test_notify_message' start_x = self.width - self.width // 8 start_y = self.height // 2 time.sleep(1) sc.swipe_by_ratio(start_x, start_y, 'left', 0.7, 500) sc.logger.info('消息中心私信页截图') sc.capture_screen(fun_name, self.img_path) sc.logger.info('通知中心测试完成,返回主页') sc.driver.press_keycode(4)
class TestCameraSelf(object): """camera美颜趣拍的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] c_btn = 'com.quvideo.xiaoying:id/img_creation' def test_camera_self(self): """拍摄-自拍视频(1:1).""" sc.logger.info('拍摄-美颜趣拍(1:1)') fun_name = 'test_camera_self' sc.logger.info('点击创作中心主按钮') sc.first_step(self.c_btn) sc.logger.info('点击“美颜趣拍”') sc.driver.find_element_by_android_uiautomator('text("美颜趣拍")').click() sc.logger.info('点击摄像头反转按钮') switch_btn = 'com.quvideo.xiaoying:id/img_switch' sc.driver.find_element_by_id(switch_btn).click() sc.capture_screen(fun_name, self.img_path) el_cp = sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_rec') # 长按拍摄5s sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认按钮') next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' sc.driver.find_element_by_id(next_btn).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() sc.logger.info('美颜趣拍测试完成,点击返回按钮返回主页面') left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' sc.driver.find_element_by_id(left_btn).click() sc.logger.info('拍摄-美颜趣拍拍摄完成')
class TestEditCollage(object): """编辑页面画中画的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_collage(self): """剪辑-画中画-图片添加.""" sc.logger.info('剪辑-画中画-图片添加') fun_name = 'test_edit_collage' start_x = self.width // 2 start_bottom = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' sc.driver.find_element_by_id(draft_img).click() sc.logger.info('点击“剪辑”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("剪辑")')).click() t_list = sc.driver.find_elements_by_id('com.quvideo.xiaoying:id/title') for el_item in t_list: if el_item.text == '画中画': sc.logger.info('开始点击画中画') el_item.click() break sc.logger.info('开始添加图片') gif_add_btn = 'com.quvideo.xiaoying:id/video_editor_btn_gif_add' sc.driver.find_element_by_id(gif_add_btn).click() sc.logger.info('添加一张图片') pic_cover_item = 'com.quvideo.xiaoying:id/collage_pic_item_cover' sc.driver.find_element_by_id(pic_cover_item).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认按钮') right_btn = 'com.quvideo.xiaoying:id/video_title_right_button' sc.driver.find_element_by_id(right_btn).click() time.sleep(2) sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 100) sc.driver.find_element_by_id(right_btn).click() sc.logger.info('再次点击确认按钮回到预览页') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() sc.logger.info('返回创作中心主界面') for i in range(3): time.sleep(2) sc.driver.press_keycode(4) sc.logger.info('剪辑-画中画-图片添加测试完成') def test_edit_collage_add(self): """剪辑-画中画-GIF添加.""" sc.logger.info('剪辑-画中画-GIF添加') fun_name = 'test_edit_collage_add' start_x = self.width // 2 start_bottom = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' sc.driver.find_element_by_id(draft_img).click() sc.logger.info('点击“剪辑”') WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("剪辑")')).click() t_list = sc.driver.find_elements_by_id('com.quvideo.xiaoying:id/title') for el_item in t_list: if el_item.text == '画中画': sc.logger.info('开始点击画中画') el_item.click() break sc.logger.info('开始添加图片') gif_add_btn = 'com.quvideo.xiaoying:id/video_editor_btn_gif_add' sc.driver.find_element_by_id(gif_add_btn).click() sc.logger.info('点击上方"gif" tab') gif_tab = 'com.quvideo.xiaoying:id/rl_gif' sc.driver.find_element_by_id(gif_tab).click() try: gif_item_cover = 'com.quvideo.xiaoying:id/collage_gif_item_cover' WebDriverWait( sc.driver, 60).until(lambda gif: gif.find_element_by_id(gif_item_cover)) el_gif = sc.driver.find_element_by_id(gif_item_cover) el_gif.click() time.sleep(5) el_gif.click() except Exception as e: sc.logger.error('GIF图片加载异常', e) return False sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认按钮') right_btn = 'com.quvideo.xiaoying:id/video_title_right_button' sc.driver.find_element_by_id(right_btn).click() sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 1000) sc.driver.find_element_by_id(right_btn).click() sc.logger.info('再次点击确认按钮回到预览页') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() sc.logger.info('返回创作中心主界面') for i in range(3): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-画中画-GIF添加测试完成') def test_edit_collage_search(self): """剪辑-画中画-GIF搜索.""" sc.logger.info('剪辑-画中画-GIF搜索') fun_name = 'test_edit_collage_search' start_x = self.width // 2 start_bottom = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() # sc.driver.find_element_by_id('com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' sc.driver.find_element_by_id(draft_img).click() sc.logger.info('点击“剪辑”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("剪辑")')).click() t_list = sc.driver.find_elements_by_id('com.quvideo.xiaoying:id/title') for el_item in t_list: if el_item.text == '画中画': sc.logger.info('开始点击画中画') el_item.click() break sc.logger.info('开始添加图片') gif_add_btn = 'com.quvideo.xiaoying:id/video_editor_btn_gif_add' sc.driver.find_element_by_id(gif_add_btn).click() sc.logger.info('点击上方"gif"tab') gif_tab = 'com.quvideo.xiaoying:id/rl_gif' sc.driver.find_element_by_id(gif_tab).click() git_search_btn = 'com.quvideo.xiaoying:id/btn_search_gif' el_gif_search = sc.driver.find_element_by_id(git_search_btn) el_gif_search.clear() el_gif_search.send_keys('a') sc.logger.info('用字符"a"搜索gif') sc.driver.press_keycode(66) try: gif_item_cover = 'com.quvideo.xiaoying:id/collage_gif_item_cover' WebDriverWait( sc.driver, 60).until(lambda gif: gif.find_element_by_id(gif_item_cover)) sc.logger.info('下载gif') el_gif = sc.driver.find_element_by_id(gif_item_cover) el_gif.click() time.sleep(5) el_gif.click() sc.capture_screen(fun_name, self.img_path) except Exception as e: sc.logger.error('GIF图片加载异常', e) sc.capture_screen(fun_name, self.img_path) return False sc.logger.info('点击确认按钮') right_btn = 'com.quvideo.xiaoying:id/video_title_right_button' sc.driver.find_element_by_id(right_btn).click() sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 1000) sc.driver.find_element_by_id(right_btn).click() sc.logger.info('再次点击确认按钮回到预览页') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() sc.logger.info('返回创作中心主界面') for i in range(3): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-画中画-GIF搜索测试完成') def test_edit_collage_cancel(self): """剪辑-画中画-放弃.""" sc.logger.info('剪辑-画中画-放弃') fun_name = 'test_edit_collage_cancel' start_x = self.width // 2 start_bottom = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' sc.driver.find_element_by_id(draft_img).click() sc.logger.info('点击“剪辑”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("剪辑")')).click() t_list = sc.driver.find_elements_by_id('com.quvideo.xiaoying:id/title') for el_item in t_list: if el_item.text == '画中画': sc.logger.info('开始点击画中画') el_item.click() break sc.logger.info('开始添加图片') gif_add_btn = 'com.quvideo.xiaoying:id/video_editor_btn_gif_add' sc.driver.find_element_by_id(gif_add_btn).click() sc.logger.info('添加一张图片') pic_cover_item = 'com.quvideo.xiaoying:id/collage_pic_item_cover' sc.driver.find_element_by_id(pic_cover_item).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认按钮') title_right_btn = 'com.quvideo.xiaoying:id/video_title_right_button' sc.driver.find_element_by_id(title_right_btn).click() sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 1000) time.sleep(1) sc.logger.info('放弃所有操作') title_left_btn = 'com.quvideo.xiaoying:id/video_title_left_button' sc.driver.find_element_by_id(title_left_btn).click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(title_left_btn)).click() sc.driver.find_element_by_android_uiautomator('text("确认")').click() sc.logger.info('返回创作中心主界面') for i in range(3): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-画中画-放弃测试完成')
class TestUserLogin(object): """用户空间登录测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] p_btn = 'com.quvideo.xiaoying:id/img_studio' def test_login_origin(self): """测试登录页面未登录时的初始状态.""" sc.logger.info('登录页面初始状态检查测试开始') fun_name = 'test_login_origin' sc.logger.info('点击个人中心主按钮') if sc.first_step(self.p_btn) is True: time.sleep(1) sc.capture_screen(fun_name, self.img_path) assert True else: assert False @staticmethod def login_judge(): """判断是否已经登录.""" log_btn = 'com.quvideo.xiaoying:id/btn_v6_login' try: el_login = WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(log_btn)) except TimeoutException: sc.logger.info('未找到“登录/注册”按钮,用户已经登录') return True else: sc.logger.info('找到“登录/注册”按钮,用户未登录') return el_login @staticmethod def qq_login(username, passwd): """使用qq登录.""" sc.logger.info('跳转到QQ登录页面') """ qq_login_id = 'com.tencent.mobileqq:id/name' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(qq_login_id)).click() el_qqlogin_list = sc.driver.find_elements_by_id(qq_login_id) for el_qq_login in el_qqlogin_list: if el_qq_login.text == '添加帐号': sc.logger.info('点击“添加帐号”按钮') el_qq_login.click() break """ # 如果本地QQ未登录,会出现先登录QQ的界面,所以分两种情况处理 passwd_frame = 'com.tencent.mobileqq:id/password' # 本地QQ已经登录的情况 try: """ WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("添加帐号")')).click() """ qq_login_id = 'com.tencent.mobileqq:id/name' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(qq_login_id)).click() el_qqlogin_list = sc.driver.find_elements_by_id(qq_login_id) for el_qq_login in el_qqlogin_list: if el_qq_login.text == '添加帐号': sc.logger.info('点击“添加帐号”按钮') el_qq_login.click() break account_frame = 'com.tencent.mobileqq:id/account' el_account = WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(account_frame)) # 本地QQ未登录的情况 except TimeoutException: account_frame_n = 'android.widget.EditText' el_account = WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_class_name(account_frame_n)) el_account.clear() sc.logger.info('输入QQ账号:%s', username) el_account.send_keys(username) WebDriverWait( sc.driver, 5, 1).until(lambda c_btn: c_btn.find_element_by_id(passwd_frame)) el_passwd = sc.driver.find_element_by_id(passwd_frame) sc.logger.info('输入QQ密码:%s', passwd) el_passwd.send_keys(passwd) qq_log_btn = 'android.widget.Button' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_class_name(qq_log_btn)).click() activity_main = 'com.quvideo.xiaoying/.XiaoYingActivity' sc.driver.wait_activity(activity_main, 10, 2) if TestUserLogin.login_judge() is True: return True return False @staticmethod def login_method(req_method, username, passwd): """定义带登录方法的登录方式,目前国内只支持三种.""" method_list = ['weibo', 'wechat', 'qq'] if req_method not in method_list: sc.logger.error('不支持的登录方式: %s', req_method) return False if req_method == 'qq': qq_btn = 'com.quvideo.xiaoying:id/tv_login_qq_text' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(qq_btn)).click() return TestUserLogin.qq_login(username, passwd) else: return False def test_login_qq(self): """国内用户测试使用qq登录.""" sc.logger.info('登录页面QQ登录测试开始') sc.first_step(self.p_btn) login_res = TestUserLogin.login_judge() if login_res is True: assert True else: sc.logger.info('点击“注册/登录”按钮') login_res.click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("使用其他账号登录")')).click() # username = '******' username = '******' # passwd = 'qa123456' passwd = 'qqqqaaaa' login_res = TestUserLogin.login_method('qq', username, passwd) assert login_res is not False
class TestEditText(object): """添加字幕的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_text(self): """剪辑-字幕-添加.""" sc.logger.info('剪辑-字幕-添加') fun_name = 'test_edit_text' startx = self.width // 2 starty = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击字幕') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("字幕")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加字幕') time.sleep(6) right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.driver.swipe(startx, starty, startx, starty, 1000) WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(right_btn)).click() opt_btn = 'com.quvideo.xiaoying:id/tv_subtitle_op_btn' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(opt_btn)).click() WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-字幕-添加测试完成') def test_edit_text_cancel(self): """剪辑-字幕-放弃.""" sc.logger.info('剪辑-字幕-放弃') fun_name = 'test_edit_text_cancel' startx = self.width // 2 starty = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击字幕') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("字幕")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加字幕') time.sleep(6) right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.driver.swipe(startx, starty, startx, starty, 1000) WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(right_btn)).click() opt_btn = 'com.quvideo.xiaoying:id/tv_subtitle_op_btn' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(opt_btn)).click() sc.logger.info('取消操作') left_btn = 'com.quvideo.xiaoying:id/terminator_left' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(left_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认取消') pos_btn = 'com.quvideo.xiaoying:id/xiaoying_alert_dialog_positive' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(pos_btn)).click() sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-字幕-放弃测试完成')
class TestUserWorks(object): """测试用户空间作品的测试类,分步截图.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_works_ui(self): """测试用户空间作品页面的初始状态.""" sc.logger.info('用户空间作品页面初始状态检查测试开始') fun_name = 'test_works_ui' sc.logger.info('点击个人中心主按钮') p_btn = 'com.quvideo.xiaoying:id/img_studio' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(p_btn)).click() el_tab_list = sc.driver.find_elements_by_id( 'com.quvideo.xiaoying:id/text_tab_title') for el_tab in el_tab_list: if el_tab.text == '作品': sc.logger.info('点击“作品”tab') el_tab.click() sc.logger.info('作品页面初始状态截图开始') sc.capture_screen(fun_name, self.img_path) assert el_tab is not None def test_works_list(self): """作品页面list view测试.""" sc.logger.info('用户空间作品页面list view测试开始') fun_name = 'test_works_list' start_x = self.width // 2 start_y = self.height // 4 start_bottom = self.height - start_y time.sleep(1) # 先上滑 sc.logger.info('上滑截图开始') result_up = sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) time.sleep(1) sc.capture_screen(fun_name, self.img_path) # 再下滑,同理 sc.logger.info('下滑截图开始') result_down = sc.swipe_by_ratio(start_x, start_y, 'down', 0.3, 300) time.sleep(1) sc.capture_screen(fun_name, self.img_path) assert result_up and result_down is True def test_works_list_function(self): """作品页面list view内功能测试.""" sc.logger.info('作品页面list view功能测试开始') fun_name = 'test_works_list' start_x = self.width // 2 start_bottom = self.height - self.height // 8 try: el_like_btn = sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_like') except NoSuchElementException: sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) time.sleep(1) el_like_btn = sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_like') # 操作前先截图记录 sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击点赞按钮') el_like_btn.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击分享按钮') el_share_btn = 'com.quvideo.xiaoying:id/xiaoying_com_text_share_count' el_share = sc.driver.find_element_by_id(el_share_btn) el_share.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击下载按钮') time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("下载")').click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) sc.logger.info('点击公开/不公开按钮') time.sleep(1) el_more_btn = 'com.quvideo.xiaoying:id/btn_more' el_more = sc.driver.find_element_by_id(el_more_btn) el_more.click() sc.capture_screen(fun_name, self.img_path) try: el_privacy = sc.driver.find_element_by_android_uiautomator( 'text("设置为不公开")') except NoSuchElementException: el_privacy = sc.driver.find_element_by_android_uiautomator( 'text("设置为公开")') el_privacy.click() assert el_privacy is not None
class TestCreationUI(object): """创作页面的测试类,分步截图""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_origin(self): """测试创作页面初始UI状态""" sc.logger.info('创作页面初始状态检查测试开始') fun_name = 'test_origin' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.capture_screen(fun_name, self.img_path) def test_refresh(self): """测试下拉刷新""" sc.logger.info('创作页面下拉刷新测试开始') fun_name = 'test_refresh' start_x = self.width // 2 start_y = self.height // 8 result = sc.swipe_by_ratio(start_x, start_y, 'down', 0.6, 600) time.sleep(1) sc.capture_screen(fun_name, self.img_path) assert result is True def test_swipe_vertical(self): """测试上下方向的滑动""" sc.logger.info('创作页面上下滑动测试开始') fun_name = 'test_swipe_vertical' start_x = self.width // 2 start_y = self.height // 8 start_bottom = self.height - start_y # 先上滑 sc.logger.info('上滑截图开始') result_up = sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) time.sleep(1) sc.capture_screen(fun_name, self.img_path) # 再下滑,同理 sc.logger.info('下滑截图开始') result_down = sc.swipe_by_ratio(start_x, start_y, 'down', 0.7, 300) time.sleep(.300) sc.capture_screen(fun_name, self.img_path) assert result_up and result_down is True def test_origin_home(self): """测试创作页home tab的功能""" sc.logger.info('创作页面home tab功能检查测试开始') fun_name = 'test_origin_home' start_x = self.width // 2 start_bottom = self.height - self.height // 8 # 先上滑一点 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) time.sleep(1) sc.capture_screen(fun_name, self.img_path) # 再按home tab sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.capture_screen(fun_name, self.img_path)
class TestEditClipsAdd(object): """镜头添加相关操作的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_add_clips(self): """剪辑-添加镜头-相册添加.""" sc.logger.info('剪辑-添加镜头-相册添加') fun_name = 'test_edit_add_clips' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“镜头编辑”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("镜头编辑")')).click() sc.logger.info('点击添加镜头的加号标识') clip_add_btn = 'com.quvideo.xiaoying:id/clipedit_add_btn' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(clip_add_btn)).click() sc.logger.info('点击相册图标') gallary_btn = 'com.quvideo.xiaoying:id/layout_move_gallery' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(gallary_btn)).click() sc.logger.info('点击“视频”下拉按钮') sc.driver.find_element_by_android_uiautomator('text("视频")').click() sc.logger.info('点击“图片”') sc.driver.find_element_by_android_uiautomator('text("图片")').click() mask_img = 'com.quvideo.xiaoying:id/img_click_mask' element_list = sc.driver.find_elements_by_id(mask_img) if len(element_list) >= 2: element_list = element_list[:2] for element_em in element_list: element_em.click() time.sleep(1) sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_android_uiautomator('text("下一步")').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-添加镜头-相册添加测试完成') def test_edit_clips_shot(self): """剪辑-添加镜头-拍摄添加.""" sc.logger.info('剪辑-添加镜头-拍摄添加') fun_name = 'test_edit_clips_shot' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“镜头编辑”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("镜头编辑")')).click() sc.logger.info('点击添加镜头的加号标识') clip_add_btn = 'com.quvideo.xiaoying:id/clipedit_add_btn' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(clip_add_btn)).click() camera_btn = 'com.quvideo.xiaoying:id/layout_move_camera' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(camera_btn)).click() rec_btn = 'com.quvideo.xiaoying:id/btn_rec' el_cp = WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(rec_btn)) # 长按拍摄 sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认键') next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' sc.driver.find_element_by_id(next_btn).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-添加镜头-拍摄添加测试完成') def test_edit_clips_cancel(self): """剪辑-添加镜头-放弃.""" sc.logger.info('剪辑-添加镜头-放弃') fun_name = 'test_edit_clips_cancel' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“镜头编辑”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("镜头编辑")')).click() sc.logger.info('点击添加镜头的加号标识') clip_add_btn = 'com.quvideo.xiaoying:id/clipedit_add_btn' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(clip_add_btn)).click() camera_btn = 'com.quvideo.xiaoying:id/layout_move_camera' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(camera_btn)).click() rec_btn = 'com.quvideo.xiaoying:id/btn_rec' el_cp = WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(rec_btn)) # 长按拍摄 sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(next_btn)).click() left_btn = 'com.quvideo.xiaoying:id/editor_back_btn' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(left_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('剪辑-添加镜头-测试完成')
class TestEditCreate(object): """edit创建视频的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_create_craft(self): """创建一个草稿视频.""" sc.logger.info('创建一个草稿视频') fun_name = 'test_create_craft' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“剪辑”按钮') editor_btn = 'com.quvideo.xiaoying:id/btn1' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(editor_btn)).click() mask_img = 'com.quvideo.xiaoying:id/btn_item_status' el_video_list = sc.driver.find_elements_by_id(mask_img) if len(el_video_list) >= 2: el_video_list = el_video_list[:2] for i in range(2): el_video_list[i].click() sc.logger.info('点击“视频”按钮') type_btn = 'com.quvideo.xiaoying:id/gallery_type' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(type_btn)).click() sc.logger.info('点击“图片”按钮') img_type_btn = 'com.quvideo.xiaoying:id/xiaoying_gallery_photo_tab' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(img_type_btn)).click() el_img_list = sc.driver.find_elements_by_id(mask_img) if len(el_img_list) >= 2: el_img_list = el_img_list[:2] for el_img_list in el_img_list: el_img_list.click() time.sleep(1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“下一步”按钮') import_n_btn = 'com.quvideo.xiaoying:id/tv_next' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(import_n_btn)).click() sc.logger.info('点击“存草稿”按钮') draft_btn = 'com.quvideo.xiaoying:id/editor_draft' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_btn)).click() sc.logger.info('返回创作中心主界面') sc.driver.press_keycode(4) sc.logger.info('创建一个草稿视频完成')
class TestCameraCollage(object): """camera的画中画功能测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] c_btn = 'com.quvideo.xiaoying:id/img_creation' def test_collage_settings(self): """拍摄-画中画拍摄-设置.""" sc.logger.info('拍摄-画中画拍摄-设置') fun_name = 'test_collage_settings' start_x = self.width - self.width // 10 start_bottom = self.height // 2 sc.logger.info('点击创作中心主按钮') sc.first_step(self.c_btn) sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 500) sc.logger.info('点击"画中画拍摄"') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("画中画拍摄")')).click() # sc.driver.find_element_by_android_uiautomator('text("画中画拍摄")').click() sc.logger.info('切换样式') effect_img = 'com.quvideo.xiaoying:id/img_effect' content_img = 'com.quvideo.xiaoying:id/wheel_img_content' sc.driver.find_element_by_id(effect_img).click() el_wheel = sc.driver.find_element_by_id(content_img) sc.logger.info('点击第一个样式效果') el_wheel.click() sc.driver.press_keycode(4) time.sleep(1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('摄像位置互换') mode_img = 'com.quvideo.xiaoying:id/img_mode' sc.driver.find_element_by_id(mode_img).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换前后置') switch_btn = 'com.quvideo.xiaoying:id/img_switch' sc.driver.find_element_by_id(switch_btn).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('camera设置') setting_btn = 'com.quvideo.xiaoying:id/img_setting' sc.driver.find_element_by_id(setting_btn).click() try: flash_btn = 'com.quvideo.xiaoying:id/v4_img_flash' sc.driver.find_element_by_id(flash_btn).click() except NoSuchElementException: sc.logger.info('前置摄像头不支持闪光灯') sc.logger.info('点击倒计时按钮') timer_btn = 'com.quvideo.xiaoying:id/v4_img_timer' sc.driver.find_element_by_id(timer_btn).click() sc.logger.info('点击曝光锁定按钮') clock_btn = 'com.quvideo.xiaoying:id/v4_img_aelock' sc.driver.find_element_by_id(clock_btn).click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) time.sleep(2) sc.logger.info('点击返回按钮返回创作中心主页面') sc.driver.press_keycode(4) sc.logger.info('拍摄-画中画拍摄-设置完成') def test_collage_shot(self): """拍摄-画中画拍摄-拍摄.""" sc.logger.info('拍摄-画中画拍摄-拍摄') fun_name = 'test_collage_shot' sc.logger.info('点击"画中画拍摄"') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("画中画拍摄")')).click() # sc.driver.find_element_by_android_uiautomator('text("画中画拍摄")').click() el_cp = sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_rec') # 长按拍摄5s sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) pip_add_btn = 'com.quvideo.xiaoying:id/xiaoying_cam_img_pip_add' sc.driver.find_element_by_id(pip_add_btn).click() sc.logger.info('添加第二段视频') el_cp.click() try: WebDriverWait(sc.driver, 30).until( lambda x: x.find_element_by_android_uiautomator('text("存草稿")')) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_android_uiautomator( 'text("存草稿")').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角返回按钮返回创作中心主页') left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' sc.driver.find_element_by_id(left_btn).click() sc.logger.info('拍摄-音乐视频拍摄完成') except Exception as e: sc.logger.error('拍摄完成跳转预览页异常', e) sc.driver.press_keycode(4) return False sc.logger.info('拍摄-画中画拍摄-拍摄完成') def test_collage_album(self): """拍摄-画中画拍摄-拍摄.""" sc.logger.info('拍摄-画中画拍摄-相册视频') fun_name = 'test_collage_album' sc.logger.info('点击"画中画拍摄"') sc.driver.find_element_by_android_uiautomator('text("画中画拍摄")').click() sc.logger.info('从相册选择视频') gallery_btn = 'com.quvideo.xiaoying:id/xiaoying_cam_btn_pip_gallery' sc.driver.find_element_by_id(gallery_btn).click() sc.logger.info('点击相册第一个视频') mask_btn = 'com.quvideo.xiaoying:id/btn_item_status' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(mask_btn)).click() sc.logger.info('点击“添加”按钮') import_btn = 'com.quvideo.xiaoying:id/tv_next' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(import_btn)).click() rec_btn = 'com.quvideo.xiaoying:id/btn_rec' try: el_capture = WebDriverWait(sc.driver, 60).until( lambda V_improt: V_improt.find_element_by_id(rec_btn)) except TimeoutError as t: sc.logger.error('导入视频超时', t) return False except Exception as e: sc.logger.error('导入视频出错', e) return False sc.logger.info('添加第二段视频') # 点拍 el_capture.click() try: WebDriverWait(sc.driver, 60).until( lambda x: x.find_element_by_android_uiautomator('text("存草稿")')) sc.logger.info('点击"存草稿"按钮') sc.driver.find_element_by_android_uiautomator( 'text("存草稿")').click() sc.logger.info('点击左上角返回按钮返回创作中心主页面') left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' sc.driver.find_element_by_id(left_btn).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('拍摄-音乐视频拍摄完成') except Exception as e: sc.logger.error('拍摄完成跳转预览页异常', e) sc.driver.press_keycode(4) return False sc.logger.info('拍摄-画中画拍摄-相册视频完成') def test_collage_edit(self): """拍摄-画中画编辑.""" sc.logger.info('拍摄-画中画编辑') fun_name = 'test_collage_edit' sc.logger.info('点击"画中画编辑"') sc.driver.find_element_by_android_uiautomator('text("画中画编辑")').click() sc.logger.info('选择第2个样式') style_btn = 'com.quvideo.xiaoying:id/xiaoying_imagebtn_style_thumb' el_style_list = sc.driver.find_elements_by_id(style_btn) el_style_list[1].click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4)
class TestCameraMusic(object): """camera音乐视频的基本测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] c_btn = 'com.quvideo.xiaoying:id/img_creation' def test_music_shot(self): """拍摄-音乐视频(3:4).""" sc.logger.info('拍摄-音乐视频(3:4)') fun_name = 'test_music_shot' start_x = self.width - self.width // 10 start_bottom = self.height // 2 sc.logger.info('点击创作中心主按钮') sc.first_step(self.c_btn) time.sleep(2) sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 500) sc.logger.info('点击“音乐视频”') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("音乐视频")')).click() # sc.driver.find_element_by_android_uiautomator('text("音乐视频")').click() sc.logger.info('点击视频比例按钮,切换到3:4') ratio_btn = 'com.quvideo.xiaoying:id/cam_btn_ratio' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(ratio_btn)).click() sc.logger.info('切换摄像头') switch_btn = 'com.quvideo.xiaoying:id/img_switch' sc.driver.find_element_by_id(switch_btn).click() sc.logger.info('点击“请选择音乐”按钮') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("请选择音乐")')).click() download_btn = 'com.quvideo.xiaoying:id/music_item_download' try: el_download = WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(download_btn)) except TimeoutException: sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.4, 500) el_download = WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(download_btn)) sc.logger.info('点击第一个下载按钮') el_download.click() music_row = 'com.quvideo.xiaoying:id/music_item_name' sc.logger.info('点击第一首音乐名') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(music_row)).click() sc.logger.info('点击播放/暂停按钮') play_btn = 'com.quvideo.xiaoying:id/music_item_play_state' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(play_btn)).click() sc.logger.info('点击“添加”按钮') use_btn = 'com.quvideo.xiaoying:id/music_item_use' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(use_btn)).click() el_cp = WebDriverWait(sc.driver, 10, 1).until( lambda x: x.find_element_by_id('com.quvideo.xiaoying:id/btn_rec')) # 长按拍摄5s sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) try: sc.logger.info('点击确认按钮') n_btn = 'com.quvideo.xiaoying:id/cam_btn_next' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(n_btn)).click() except TimeoutException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') draft_btn = 'com.quvideo.xiaoying:id/editor_draft' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_btn)).click() left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(left_btn)).click() sc.logger.info('拍摄-音乐视频(3:4)完成') def test_music_change(self): """拍摄-音乐视频-更换音乐重录.""" sc.logger.info('拍摄-音乐视频-更换音乐重录') fun_name = 'test_music_change' start_x = self.width - self.width // 10 start_bottom = self.height // 2 time.sleep(2) sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 500) sc.logger.info('点击“音乐视频”') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("音乐视频")')).click() sc.logger.info('点击“请选择音乐”') music_ctr_btn = 'com.quvideo.xiaoying:id/icon_tool_music_control_arrow' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(music_ctr_btn)).click() sc.logger.info('点击第一首音乐名') music_name_btn = 'com.quvideo.xiaoying:id/music_item_name' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(music_name_btn)).click() sc.logger.info('点击播放/暂停按钮') play_btn = 'com.quvideo.xiaoying:id/music_item_play_state' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(play_btn)).click() sc.logger.info('点击“添加”按钮') use_btn = 'com.quvideo.xiaoying:id/music_item_use' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(use_btn)).click() el_cp = WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id('com.quvideo.xiaoying:id/btn_rec')) # 长按拍摄5s sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) try: sc.logger.info('点击确认按钮') next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(next_btn)).click() except NoSuchElementException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角返回按钮') left_btn = 'com.quvideo.xiaoying:id/editor_back_btn' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(left_btn)).click() sc.logger.info('点击音乐标题') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(music_ctr_btn)).click() try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("更换音乐重录")')).click() except TimeoutException: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(music_ctr_btn)).click() tl = sc.driver.find_elements_by_id('com.quvideo.xiaoying:id/title') for el_title in tl: if el_title.text == '更换音乐重录': sc.logger.info('点击“更换音乐重录”') el_title.click() sc.logger.info('点击音乐名') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(music_name_btn)).click() sc.logger.info('点击播放/暂停按钮') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(play_btn)).click() sc.logger.info('点击“添加”按钮') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(use_btn)).click() el_cp = WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id('com.quvideo.xiaoying:id/btn_rec')) # 长按拍摄5s sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(next_btn)).click() sc.logger.info('点击“确认”按钮') except NoSuchElementException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') draft_btn = 'com.quvideo.xiaoying:id/editor_draft' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_btn)).click() sc.logger.info('点击左上角返回按钮返回创作中心主页面') back_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(back_btn)).click() sc.logger.info('拍摄-音乐视频-更换音乐重录完成') def test_music_redo(self): """拍摄-音乐视频-重新录制.""" sc.logger.info('拍摄-音乐视频-直接重录') fun_name = 'test_music_redo' music_ctr_btn = 'com.quvideo.xiaoying:id/icon_tool_music_control_arrow' music_name_btn = 'com.quvideo.xiaoying:id/music_item_name' play_btn = 'com.quvideo.xiaoying:id/music_item_play_state' use_btn = 'com.quvideo.xiaoying:id/music_item_use' next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' left_btn = 'com.quvideo.xiaoying:id/editor_back_btn' sc.logger.info('点击“音乐视频”') sc.driver.find_element_by_android_uiautomator('text("音乐视频")').click() sc.logger.info('点击“请选择音乐”') sc.driver.find_element_by_id(music_ctr_btn).click() el_music_name = sc.driver.find_element_by_id(music_name_btn) sc.logger.info('点击音乐标题') el_music_name.click() sc.logger.info('点击播放/暂停按钮') sc.driver.find_element_by_id(play_btn).click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_id(use_btn).click() el_cp = sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_rec') # 长按拍摄5s sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) try: sc.logger.info('点击确认按钮') sc.driver.find_element_by_id(next_btn).click() except NoSuchElementException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.logger.info('点击左上角返回按钮返回') sc.driver.find_element_by_id(left_btn).click() sc.logger.info('点击音乐标题') music_title = 'com.quvideo.xiaoying:id/music_title' WebDriverWait(sc.driver, 5, 1).until( lambda c_btn: c_btn.find_element_by_id(music_title)).click() # sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon_tool_music_control_arrow').click() try: WebDriverWait(sc.driver, 5, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("直接重录")')).click() # sc.driver.find_element_by_android_uiautomator('text("直接重录")').click() except Exception as err: sc.driver.find_element_by_id(music_ctr_btn).click() sc.capture_screen(fun_name, self.img_path) title_el = 'com.quvideo.xiaoying:id/title' WebDriverWait(sc.driver, 5, 1).until( lambda c_btn: c_btn.find_elements_by_id(title_el)) el_title_list = sc.driver.find_elements_by_id(title_el) for el_title in el_title_list: if el_title.text == '直接重录': sc.logger.info('直接重录') el_title.click() break sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认放弃操作') p_btn = 'com.quvideo.xiaoying:id/buttonDefaultPositive' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(p_btn)).click() sc.driver.press_keycode(4) sc.logger.info('拍摄-音乐视频-直接重录完成')
class TestPlanetRec(object): """小影圈推荐页的测试类,分步截图.""" width, heigh = sc.get_size() img_path = sc.path_lists[0] def test_planet_page(self): """小影圈推荐页面初始状态测试.""" sc.logger.info('小影圈推荐页面初始状态检查开始') fun_name = 'test_planet_page' sc.logger.info('点击小影圈主按钮') p_btn = 'com.quvideo.xiaoying:id/img_find' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(p_btn)).click() sc.logger.info('小影圈推荐页面初始状态截图开始') sc.capture_screen(fun_name, self.img_path) def test_refresh(self): """测试下拉刷新.""" sc.logger.info('推荐页面下拉刷新测试开始') fun_name = 'test_refresh' start_x = self.width // 2 start_y = self.heigh // 8 time.sleep(1) result = sc.swipe_by_ratio(start_x, start_y, 'down', 0.6, 700) time.sleep(1) sc.logger.info('小影圈推荐页面下拉刷新截图开始') sc.capture_screen(fun_name, self.img_path) assert result is True def test_swipe_vertical(self): """测试上下方向的滑动.""" sc.logger.info('推荐页面滑动测试开始') fun_name = 'test_swipe_vertical' start_x = self.width // 2 start_y = self.heigh // 8 start_bottom = self.heigh - start_y # 先上滑 sc.logger.info('上滑截图开始') time.sleep(1) result_up = sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 500) sc.capture_screen(fun_name, self.img_path) # 再下滑,同理 sc.logger.info('下滑截图开始') result_down = sc.swipe_by_ratio(start_x, start_y, 'down', 0.3, 500) time.sleep(1) sc.capture_screen(fun_name, self.img_path) assert result_up and result_down is True def test_origin_home(self): """推荐页tab的功能.""" sc.logger.info('推荐页面tab功能检查测试开始') fun_name = 'test_origin_home' start_x = self.width // 2 start_bottom = self.heigh - self.heigh // 8 # 先上滑一点 time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('小影圈推荐页面轻微上滑截图开始') sc.capture_screen(fun_name, self.img_path) # 再按推荐tab sc.logger.info('开始查找小影圈推荐tab') WebDriverWait( sc.driver, 30).until(lambda el: el.find_element_by_android_uiautomator( 'text("推荐")')).click() time.sleep(1) sc.logger.info('小影圈推荐页面点击“推荐”tab截图开始') sc.capture_screen(fun_name, self.img_path) def test_recommend_video(self): """测试推荐页面的视频.""" sc.logger.info('推荐页面视频检查开始') fun_name = 'test_recommend_video' thumb_img = 'com.quvideo.xiaoying:id/img_video_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(thumb_img)).click() time.sleep(1) sc.logger.info('小影圈推荐页面进入视频feed流截图开始') sc.capture_screen(fun_name, self.img_path) # sc.driver.back() sc.logger.info('点击返回键') sc.driver.press_keycode(4) def test_recommend_user(self): """测试推荐页面的用户.""" sc.logger.info('推荐页面用户检查开始') fun_name = 'test_recommend_user' avatar_img = 'com.quvideo.xiaoying:id/img_owner_avatar' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(avatar_img)).click() time.sleep(1) sc.logger.info('小影圈推荐页面点击用户头像进入用户空间截图开始') sc.capture_screen(fun_name, self.img_path) # sc.driver.back() sc.logger.info('点击返回键') sc.driver.press_keycode(4)
class TestCreationTemplate(object): """创作页面素材中心测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def template_download(cls, type, download_id): """素材下载.""" sc.logger.info('%s下载测试', type) """ sc.logger.info('向下滑动') start_x = cls.width // 2 start_bottom = cls.height - cls.height // 5 while True: try: sc.driver.find_element_by_android_uiautomator('text("没有更多了…")').click() break except NoSuchElementException: sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 300) sc.logger.info('已经滑动到%s最底部了', type) """ sc.logger.info('开始下载') el_template_down = sc.driver.find_element_by_id(download_id) try: el_template_down.click() except NoSuchElementException: sc.logger.info('当前页面所有素材已下载完成') el_template_use = sc.driver.find_elements_by_android_uiautomator( 'text("使用")') el_template_use.click() return True sc.logger.info('检查素材下载是否成功') try: WebDriverWait( sc.driver, 30).until(lambda theme_use: theme_use. find_element_by_android_uiautomator('text("使用")')) except TimeoutError as t: sc.logger.info('素材下载超时', t) return False except Exception as e: sc.logger.info('素材下载失败', e) return False sc.logger.info('%s下载测试完成', type) @classmethod def template_use(cls, type): """使用素材并进入预览页测试.""" sc.logger.info('%s使用素材并进入预览页测试', type) time.sleep(1) fun_name = 'template_use' try: sc.logger.info('点击“使用”按钮') el_template_use = sc.driver.find_element_by_android_uiautomator( 'text("使用")') el_template_use.click() except NoSuchElementException: sc.logger.info('未找到已下载的素材') return False sc.capture_screen(fun_name, cls.img_path) el_videos = sc.driver.find_elements_by_id( 'com.quvideo.xiaoying:id/img_click_mask') for i in range(2): time.sleep(1) el_videos[i].click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/imgbtn_import').click() try: WebDriverWait(sc.driver, 60).until( lambda V_improt: V_improt. find_element_by_android_uiautomator('text("下一步")')) except TimeoutError as t: sc.logger.error('导入视频超时', t) return False except Exception as e: sc.logger.error('导入视频出错', e) return False sc.driver.find_element_by_android_uiautomator('text("下一步")').click() sc.logger.info('%s使用并进入预览页测试完成', type) @classmethod def theme_manager(cls, type, delete_id): """主题管理.""" sc.logger.info('%s删除测试', type) fun_name = 'theme_manager' sc.capture_screen(fun_name, cls.img_path) try: sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/text_right').click() except NoSuchElementException: sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/right_mgr').click() sc.capture_screen(fun_name, cls.img_path) el_del_template = sc.driver.find_element_by_id(delete_id) el_del_template.click() try: sc.driver.find_element_by_android_uiautomator('text("确认")').click() except NoSuchElementException: sc.logger.info('%s删除不需要确认', type) sc.capture_screen(fun_name, cls.img_path) sc.logger.info('返回创作中心页面') for i in range(3): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('%s删除测试完成', type) def test_template_theme(self): """素材中心-主题.""" sc.logger.info('进入素材中心-主题') fun_name = 'test_template_theme' time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() sc.logger.info('点击“主题”') sc.driver.find_element_by_android_uiautomator('text("主题")').click() try: btn_download = 'com.quvideo.xiaoying:id/imgbtn_download' sc.driver.find_element_by_id(btn_download) self.template_download('主题', btn_download) except NoSuchElementException: sc.logger.info('此页素材已经下载完毕了') time.sleep(1) self.template_use('主题') time.sleep(5) sc.logger.info('点击“存草稿”') sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() sc.logger.info('点击左上角返回创作中心主界面') time.sleep(2) sc.driver.press_keycode(4) time.sleep(2) sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() sc.driver.find_element_by_android_uiautomator('text("主题")').click() sc.logger.info('删除刚刚下载的主题') sc.capture_screen(fun_name, self.img_path) self.theme_manager( '主题', 'com.quvideo.xiaoying:id/template_caption_grid_btn_update') def test_template_subtitle(self): """素材中心-字幕.""" sc.logger.info('素材中心-字幕') fun_name = 'test_template_subtitle' time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() sc.logger.info('点击“字幕”') sc.driver.find_element_by_android_uiautomator('text("字幕")').click() sc.logger.info('下载并使用字幕') try: btn_down = 'com.quvideo.xiaoying:id/template_pack_download_progress' sc.driver.find_element_by_id(btn_down) self.template_download('字幕', btn_down) sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger('字幕已经下载完毕了') self.template_use('字幕') time.sleep(5) sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() time.sleep(1) sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() time.sleep(2) sc.logger.info('点击“存草稿”') sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() time.sleep(2) sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() sc.driver.find_element_by_android_uiautomator('text("字幕")').click() sc.logger.info('删除刚刚下载的字幕') sc.capture_screen(fun_name, self.img_path) self.theme_manager('字幕', 'com.quvideo.xiaoying:id/img_delete') def test_template_effect(self): """素材中心-特效.""" sc.logger.info('素材中心-特效') fun_name = 'test_template_effect' time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() sc.logger.info('点击“特效”') sc.driver.find_element_by_android_uiautomator('text("特效")').click() self.template_download( '特效', 'com.quvideo.xiaoying:id/template_pack_download_progress') self.template_use('特效') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() time.sleep(2) sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() time.sleep(2) sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() time.sleep(2) sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() sc.driver.find_element_by_android_uiautomator('text("特效")').click() sc.logger.info('删除刚刚下载的特效') sc.capture_screen(fun_name, self.img_path) self.theme_manager( '特效', 'com.quvideo.xiaoying:id/template_caption_grid_btn_update') def test_template_filter(self): """素材中心-滤镜.""" sc.logger.info('素材中心-滤镜') fun_name = 'test_template_filter' start_x = self.width // 2 start_bottom = self.height - self.height // 5 time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() try: sc.logger.info('点击“滤镜”') sc.driver.find_element_by_android_uiautomator('text("滤镜")').click() except NoSuchElementException: sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 300) sc.driver.find_element_by_android_uiautomator('text("滤镜")').click() sc.logger.info('开始下载滤镜') try: el_template_down = sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/template_filter_download') el_template_down.click() except NoSuchElementException: sc.logger.info('当前页面所有滤镜已下载完成') sc.logger.info('检查滤镜下载是否成功') try: WebDriverWait( sc.driver, 30).until(lambda use: use.find_element_by_android_uiautomator( 'text("使用")')) except TimeoutError as t: sc.logger.info('滤镜下载超时', t) return False except Exception as e: sc.logger.info('滤镜下载失败', e) return False sc.logger.info('滤镜下载测试完成') self.template_use('滤镜') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() time.sleep(10) sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) time.sleep(2) sc.logger.info('删除刚刚下载的滤镜') sc.capture_screen(fun_name, self.img_path) self.theme_manager('滤镜', 'com.quvideo.xiaoying:id/img_delete') def test_template_sticker(self): """素材中心-动画贴纸.""" sc.logger.info('素材中心-动画贴纸') fun_name = 'test_template_sticker' start_x = self.width // 2 start_bottom = self.height - self.height // 4 time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) sc.logger.info('点击“动画贴纸”') sc.driver.find_element_by_android_uiautomator('text("动画贴纸")').click() self.template_download( '动画贴纸', 'com.quvideo.xiaoying:id/template_pack_download_progress') self.template_use('动画贴纸') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() time.sleep(1) sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) sc.driver.find_element_by_android_uiautomator('text("动画贴纸")').click() sc.logger.info('删除刚刚下载的动画贴纸') sc.capture_screen(fun_name, self.img_path) self.theme_manager('动画贴纸', 'com.quvideo.xiaoying:id/img_delete') # 目前code需要先下载至少一个转场,download控件无法获取到,需要再调试 def test_template_transition(self): """素材中心-转场.""" sc.logger.info('素材中心-转场') fun_name = 'test_template_transition' start_x = self.width // 2 start_bottom = self.height - self.height // 4 time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) time.sleep(1) sc.logger.info('点击“转场”') sc.driver.find_element_by_android_uiautomator('text("转场")').click() time.sleep(1) try: btn_download = 'com.quvideo.xiaoying:id/imgbtn_download' sc.driver.find_element_by_id(btn_download) self.template_download('转场', btn_download) except NoSuchElementException: sc.logger.info('当前页面素材已经全部下载完毕了') time.sleep(1) self.template_use('转场') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() time.sleep(1) sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("转场")').click() sc.logger.info('删除刚刚下载的转场') sc.capture_screen(fun_name, self.img_path) self.theme_manager( '转场', 'com.quvideo.xiaoying:id/template_caption_grid_btn_update') def test_template_font(self): """素材中心-字体.""" sc.logger.info('素材中心-字体') fun_name = 'test_template_font' start_x = self.width // 2 start_bottom = self.height - self.height // 4 time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) sc.logger.info('点击“字体”') sc.driver.find_element_by_android_uiautomator('text("字体")').click() sc.logger.info('开始下载字体') el_font_list = sc.driver.find_elements_by_id( 'com.quvideo.xiaoying:id/btn_download') try: el_font_list[0].click() except Exception: sc.logger.info('当前页面所有字体已下载完成') el_font_use = sc.driver.find_element_by_android_uiautomator( 'text("使用")') el_font_use.click() return True sc.logger.info('检查字体下载是否成功') try: WebDriverWait( sc.driver, 30).until(lambda use: use.find_element_by_android_uiautomator( 'text("使用")')) except TimeoutError as t: sc.logger.info('字体下载超时', t) return False except Exception as e: sc.logger.info('字体下载失败', e) return False sc.logger.info('字体下载测试完成') time.sleep(1) self.template_use('字体') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() time.sleep(1) sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) sc.driver.find_element_by_android_uiautomator('text("字体")').click() sc.logger.info('删除刚刚下载的字体') sc.capture_screen(fun_name, self.img_path) self.theme_manager('字体', 'com.quvideo.xiaoying:id/img_delete') def test_template_giphy(self): """GIPHY-下载.""" sc.logger.info('素材中心-GIPHY') fun_name = 'test_template_giphy' start_x = self.width // 2 start_bottom = self.height - self.height // 4 time.sleep(1) sc.logger.info('点击创作中心主按钮') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_creation').click() sc.logger.info('点击“素材中心”') sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) sc.logger.info('点击“动画贴纸”') sc.driver.find_element_by_android_uiautomator('text("动画贴纸")').click() sc.logger.info('点击“GIPHY”') sc.driver.find_element_by_android_uiautomator('text("GIPHY")').click() time.sleep(5) sc.logger.info('开始下载GIPHY') try: el_template_down = sc.driver.find_elements_by_android_uiautomator( 'text("下载")') el_template_down.click() except Exception: sc.logger.info('当前页面所有GIPHY已下载完成') sc.logger.info('检查GIPHY下载是否成功') try: WebDriverWait( sc.driver, 30).until(lambda giphy_use: giphy_use. find_element_by_android_uiautomator('text("使用")')) el_template_use = sc.driver.find_elements_by_android_uiautomator( 'text("使用")') el_template_use.click() except TimeoutError as t: sc.logger.info('GIPHY下载超时', t) return False except Exception as e: sc.logger.info('GIPHY下载失败', e) return False sc.logger.info('GIPHY下载测试完成') self.template_use('GIPHY') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/xiaoying_com_btn_right').click() sc.logger.info('点击“存草稿”') sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() time.sleep(1) sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator('text("素材中心")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) sc.driver.find_element_by_android_uiautomator('text("动画贴纸")').click() sc.driver.find_element_by_android_uiautomator('text("GIPHY")').click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/right_button').click() time.sleep(1) sc.logger.info('删除刚刚下载的giphy') sc.capture_screen(fun_name, self.img_path) self.theme_manager('GIPHY', 'com.quvideo.xiaoying:id/text_delete')
class TestHome(object): """小影主页面的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_home_minor(self): """首页-次要功能位检查.""" sc.logger.info('首页-次要功能位检查') fun_name = 'test_home_minor' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sub_icon_btn = 'com.quvideo.xiaoying:id/sub_btn_icon' element_list = sc.driver.find_elements_by_id(sub_icon_btn) element_list.pop(0) for element_em in element_list: element_em.click() time.sleep(2) sc.driver.press_keycode(4) sc.capture_screen(fun_name, self.img_path) coord_x = element_list[-1].location.get('x') coord_y = element_list[-1].location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'left', 0.7, 500) sec_list = sc.driver.find_elements_by_id(sub_icon_btn) for sec_em in sec_list: sec_em.click() time.sleep(2) sc.driver.press_keycode(4) sc.capture_screen(fun_name, self.img_path) sc.logger.info('首页-次要功能位检查完毕') def test_home_other(self): """首页-小影百宝箱及其他.""" sc.logger.info('首页-推荐位-小影百宝箱及其他') fun_name = 'test_home_other' start_x = self.width // 2 start_bottom = self.height - self.height // 5 time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 500) vip_btn = 'com.quvideo.xiaoying:id/btn_vip' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(vip_btn)).click() back_img = 'com.quvideo.xiaoying:id/vip_home_close' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(back_img)).click() shuffle_btn = 'com.quvideo.xiaoying:id/btn_shuffle' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(shuffle_btn)).click() sc.driver.press_keycode(4) img_item = 'com.quvideo.xiaoying:id/creation_item_img' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(img_item)).click() sc.capture_screen(fun_name, self.img_path) time.sleep(3) sc.driver.press_keycode(4) sc.logger.info('首页-推荐位-小影百宝箱及其他检查完毕') def test_home_studio(self): """首页-我的工作室.""" sc.logger.info('首页-我的工作室') fun_name = 'test_home_studio' start_x = self.width // 2 start_bottom = self.height // 5 sc.logger.info('下滑一点') time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'down', 0.7, 700) sc.capture_screen(fun_name, self.img_path) WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("更多草稿")')).click() sc.logger.info('点击第一个草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' sc.driver.find_element_by_id(draft_img).click() time.sleep(1) try: sc.logger.info('点击左上角返回') left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(left_btn)).click() sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('此草稿视频为拍摄视频,返回的是拍摄页面') cancel_btn = 'com.quvideo.xiaoying:id/cam_btn_cancel' sc.driver.find_element_by_id(cancel_btn).click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) sc.logger.info('点击“保存/上传”') publish_btn = 'com.quvideo.xiaoying:id/xiaoying_studio_publish_btn' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(publish_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角返回') back_img = 'com.quvideo.xiaoying:id/img_back' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(back_img)).click() sc.logger.info('删除一个草稿') del_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_delete' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(del_img)).click() sc.driver.find_element_by_android_uiautomator('text("确认")').click() sc.driver.press_keycode(4) sc.logger.info('首页-我的工作室完成')
class TestEditFX(object): """特效的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_fx(self): """剪辑-特效-添加.""" sc.logger.info('剪辑-特效-添加') fun_name = 'test_edit_fx' startx = self.width // 2 starty = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击特效') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("特效")')).click() fx_op_btn = 'com.quvideo.xiaoying:id/ve_music_op_btn' try: sc.logger.info('查找下载更多') fx_down_btn = 'com.quvideo.xiaoying:id/iv_download_more' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(fx_down_btn)) except TimeoutException: sc.logger.info('当前时间点已有fx,先删除') sc.driver.swipe(startx, starty, startx, starty, 500) try: icon_btn = 'com.quvideo.xiaoying:id/select_item' icon_list = sc.driver.find_elements_by_id(icon_btn) for icon_el in icon_list: icon_el.click() try: WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() break except TimeoutException: sc.driver.press_keycode(4) time.sleep(1) sc.driver.press_keycode(4) time.sleep(1) sc.driver.swipe(startx, starty, startx, starty, 500) except TimeoutException: WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() sc.logger.info('点击第二个特效') fx_cover = ('//android.support.v7.widget.RecyclerView/' 'android.widget.RelativeLayout[2]') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_xpath(fx_cover)).click() sc.capture_screen(fun_name, self.img_path) right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(right_btn)).click() time.sleep(1) sc.driver.swipe(startx, starty, startx, starty, 1000) WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-特效-添加测试完成') def test_edit_fx_del(self): """剪辑-特效-删除.""" sc.logger.info('剪辑-特效-删除') fun_name = 'test_edit_fx_del' startx = self.width // 2 starty = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击特效') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("特效")')).click() fx_op_btn = 'com.quvideo.xiaoying:id/ve_music_op_btn' try: sc.logger.info('查找下载更多') fx_down_btn = 'com.quvideo.xiaoying:id/iv_download_more' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(fx_down_btn)) except TimeoutException: sc.logger.info('当前时间点已有fx,先删除') sc.driver.swipe(startx, starty, startx, starty, 500) try: icon_btn = 'com.quvideo.xiaoying:id/select_item' icon_list = sc.driver.find_elements_by_id(icon_btn) for icon_el in icon_list: icon_el.click() try: WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() break except TimeoutException: sc.driver.press_keycode(4) time.sleep(1) sc.driver.press_keycode(4) time.sleep(1) sc.driver.swipe(startx, starty, startx, starty, 500) except TimeoutException: WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-特效-删除测试完成') def test_edit_fx_cancel(self): """剪辑-特效-放弃.""" sc.logger.info('剪辑-特效-放弃') fun_name = 'test_edit_fx_cancel' startx = self.width // 2 starty = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击特效') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("特效")')).click() fx_op_btn = 'com.quvideo.xiaoying:id/ve_music_op_btn' try: sc.logger.info('查找下载更多') fx_down_btn = 'com.quvideo.xiaoying:id/iv_download_more' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(fx_down_btn)) except TimeoutException: sc.logger.info('当前时间点已有fx,先删除') sc.driver.swipe(startx, starty, startx, starty, 500) try: icon_btn = 'com.quvideo.xiaoying:id/select_item' icon_list = sc.driver.find_elements_by_id(icon_btn) for icon_el in icon_list: icon_el.click() try: WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() break except TimeoutException: sc.driver.press_keycode(4) time.sleep(1) sc.driver.press_keycode(4) time.sleep(1) sc.driver.swipe(startx, starty, startx, starty, 500) except TimeoutException: WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(fx_op_btn)).click() sc.logger.info('点击第二个特效') fx_cover = ('//android.support.v7.widget.RecyclerView/' 'android.widget.RelativeLayout[2]') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_xpath(fx_cover)).click() sc.capture_screen(fun_name, self.img_path) right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(right_btn)).click() time.sleep(1) sc.driver.swipe(startx, starty, startx, starty, 1000) sc.logger.info('放弃之前的操作') left_btn = 'com.quvideo.xiaoying:id/terminator_left' WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(left_btn)).click() sc.logger.info('确认放弃') confirm_btn = 'com.quvideo.xiaoying:id/xiaoying_alert_dialog_positive' WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_id(confirm_btn)).click() sc.capture_screen(fun_name, self.img_path) for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-特效-放弃测试完成')
class TestEditClip(object): """镜头编辑相关操作的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_clip_edit_function(self): """剪辑-镜头编辑-功能遍历.""" sc.logger.info('剪辑-镜头编辑-功能遍历') fun_name = 'test_clip_edit_function' video_flag = 0 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“镜头编辑”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("镜头编辑")')).click() confirm_btn = 'com.quvideo.xiaoying:id/terminator_right' sc.logger.info('剪辑-镜头编辑-图片时长') try: sc.logger.info('点击“图片时长”') WebDriverWait(sc.driver, 5, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("图片时长")')).click() sc.logger.info('点击“确认”') sc.driver.find_element_by_id(confirm_btn).click() except TimeoutException: video_flag = 1 sc.logger.info('当前镜头是视频,不支持时长') sc.logger.info('剪辑-镜头编辑-修剪') try: sc.logger.info('点击“修剪”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("修剪")')).click() sc.logger.info('点击“确认”') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(confirm_btn)).click() except NoSuchElementException: sc.logger.info('当前镜头是图片,不支持修剪') sc.logger.info('剪辑-镜头编辑-分割') if video_flag == 1: sc.logger.info('点击“分割”') WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("分割")')).click() sc.logger.info('点击“确认”') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(confirm_btn)).click() try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(confirm_btn)) sc.logger.info('时长太短不能分割') sc.driver.press_keycode(4) except TimeoutException: sc.logger.info('分割成功') sc.logger.info('剪辑-镜头编辑-复制') el_copy = WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("复制")')) el_copy.click() sc.logger.info('工具栏左滑一些') time.sleep(2) coord_x = el_copy.location.get('x') coord_y = el_copy.location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'left', 0.5, 800) sc.capture_screen(fun_name, self.img_path) sc.logger.info('剪辑-镜头编辑-变速') if video_flag == 1: sc.logger.info('点击“变速”') sc.driver.find_element_by_android_uiautomator('text("变速")').click() sc.logger.info('点击“确认”') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(confirm_btn)).click() sc.logger.info('剪辑-镜头编辑-调色') sc.logger.info('点击“调色”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("调色")')).click() sc.logger.info('点击“确认”') WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(confirm_btn)).click() sc.logger.info('剪辑-镜头编辑-静音') sc.logger.info('点击“静音”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("静音")')).click() sc.logger.info('剪辑-镜头编辑-倒放镜头') sc.logger.info('点击“倒放镜头”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("倒放镜头")')).click() try: WebDriverWait( sc.driver, 120).until(lambda reverse: reverse. find_element_by_android_uiautomator('text("倒放镜头")')) except TimeoutError as t: sc.logger.error('倒放镜头超时', t) return False sc.logger.info('剪辑-镜头编辑-旋转') sc.logger.info('点击“旋转”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("旋转")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-镜头编辑-功能遍历完成')
class TestPlanetExploreUI(object): """小影圈发现页UI的测试类,分步截图.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_planet_page(self): """小影圈发现页面初始状态测试.""" sc.logger.info('小影圈发现页面初始状态检查开始') fun_name = 'test_planet_page' sc.logger.info('点击小影圈主按钮') p_btn = 'com.quvideo.xiaoying:id/img_find' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(p_btn)).click() time.sleep(1) sc.logger.info('开始查找小影圈发现tab') el_tab_list = sc.driver.find_elements_by_id('android:id/text1') for el_tab in el_tab_list: if el_tab.text == '发现': sc.logger.info('点击“发现”tab') el_tab.click() break sc.logger.info('小影圈发现页面初始状态截图开始') sc.capture_screen(fun_name, self.img_path) assert el_tab is not None def test_refresh(self): """测试下拉刷新.""" sc.logger.info('发现页面下拉刷新测试开始') start_x = self.width // 2 start_y = self.height // 8 fun_name = 'test_refresh' time.sleep(1) result = sc.swipe_by_ratio(start_x, start_y, 'down', 0.6, 600) sc.logger.info('小影圈发现页面下拉刷新截图开始') sc.capture_screen(fun_name, self.img_path) assert result is True def test_swipe_vertical(self): """测试上下方向的滑动.""" sc.logger.info('发现页面滑动测试开始') start_x = self.width // 2 start_y = self.height // 8 start_bottom = self.height - start_y fun_name = 'test_swipe_vertical' # 先上滑 sc.logger.info('上滑截图开始') result_up = sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) time.sleep(1) sc.capture_screen(fun_name, self.img_path) # 再下滑,同理 sc.logger.info('下滑截图开始') result_down = sc.swipe_by_ratio(start_x, start_y, 'down', 0.3, 300) time.sleep(1) sc.capture_screen(fun_name, self.img_path) assert result_up and result_down is True def test_origin_home(self): """发现页tab的功能.""" sc.logger.info('发现页面tab功能检查测试开始') start_x = self.width // 2 start_bottom = self.height - self.height // 8 fun_name = 'test_origin_home' # 先上滑一点 result_up = sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) time.sleep(1) sc.logger.info('小影圈发现页面轻微上滑截图开始') sc.capture_screen(fun_name, self.img_path) # 再按发现tab sc.logger.info('开始查找小影圈发现tab') el_tab_list = sc.driver.find_elements_by_id('android:id/text1') for el_tab in el_tab_list: if el_tab.text == '发现': sc.logger.info('点击“发现”tab') el_tab.click() break time.sleep(1) sc.logger.info('小影圈发现页面点击“发现”tab截图开始') sc.capture_screen(fun_name, self.img_path) assert result_up and el_tab is not None
class TestEditSound(object): """配音的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_sound_add(self): """剪辑-配音-添加.""" sc.logger.info('剪辑-配音-添加') fun_name = 'test_edit_sound_add' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击配音和音效') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("配音和音效")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('开始录音') record_btn = 'com.quvideo.xiaoying:id/ll_editor_audio_record_touch' try: sc.logger.info('点击录音按钮') WebDriverWait(sc.driver, 5, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("删除")')).click() except TimeoutException: el_record = WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(record_btn)) co_x = el_record.location.get('x') + el_record.size.get('width') / 2 co_y = el_record.location.get('y') + el_record.size.get('height') / 2 sc.driver.tap([(co_x, co_y)], 3000) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认') right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait( sc.driver, 60, 1).until(lambda el: el.find_element_by_id(right_btn)).click() """ x = record.location.get('x') y = record.location.get('y') sc.driver.swipe(x, y, x, y, 5000) sc.logger.info('点击添加音频的按钮') au_add_btn = 'com.quvideo.xiaoying:id/xiaoying_ve_imgbtn_add_audio_dub' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(au_add_btn)).click() music_row = 'com.quvideo.xiaoying:id/musiclist_title' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(music_row)).click() music_add_btn = 'com.quvideo.xiaoying:id/btn_add_music' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(music_add_btn)).click() """ sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-配音-添加测试完成') def test_edit_sound_del(self): """剪辑-配音-删除.""" sc.logger.info('剪辑-配音-删除') fun_name = 'test_edit_sound_del' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击配音和音效') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("配音和音效")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除原有音效') try: sc.capture_screen(fun_name, self.img_path) WebDriverWait(sc.driver, 5, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("删除")')).click() except TimeoutException: sc.logger.info('该视频没有添加音效,跳过') sc.logger.info('点击确认') right_btn = 'com.quvideo.xiaoying:id/terminator_right' sc.capture_screen(fun_name, self.img_path) WebDriverWait( sc.driver, 60, 1).until(lambda el: el.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-配音-删除测试完成') def test_edit_sound_cancel(self): """剪辑-配音-放弃.""" sc.logger.info('剪辑-配音-放弃') fun_name = 'test_edit_sound_cancel' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击配音和音效') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("配音和音效")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('开始录音') record_btn = 'com.quvideo.xiaoying:id/ll_editor_audio_record_touch' try: sc.logger.info('点击录音按钮') WebDriverWait(sc.driver, 5, 1).until( lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("删除")')).click() except TimeoutException: el_record = WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(record_btn)) co_x = el_record.location.get('x') + el_record.size.get('width') / 2 co_y = el_record.location.get('y') + el_record.size.get('height') / 2 sc.driver.tap([(co_x, co_y)], 3000) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认') left_btn = 'com.quvideo.xiaoying:id/terminator_left' WebDriverWait( sc.driver, 60, 1).until(lambda el: el.find_element_by_id(left_btn)).click() pos_btn = 'com.quvideo.xiaoying:id/xiaoying_alert_dialog_positive' WebDriverWait( sc.driver, 60, 1).until(lambda el: el.find_element_by_id(pos_btn)).click() sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-配音-放弃测试完成')
class TestCreationShare(object): """创作页面内分享相关的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_share_create(self): """分享-创建视频.""" sc.logger.info('分享-创建视频') fun_name = 'test_share_create' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon2').click() el_cp = sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_rec') # 长按拍摄 sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(next_btn)).click() sc.driver.find_element_by_android_uiautomator('text("保存/上传")').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('分享-创建视频完成') def test_share_edit(self): """分享-编辑视频标题/话题相关.""" sc.logger.info('分享-编辑视频标题/话题相关') fun_name = 'test_share_edit' start_x = self.width // 2 start_bottom = self.height - self.height // 4 sc.logger.info('添加标题') text_input = 'com.quvideo.xiaoying:id/share_video_title_text' el_title = WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(text_input)) el_title.clear() el_title.send_keys('video title test') sc.logger.info('添加话题') topic_btn = 'com.quvideo.xiaoying:id/share_btn_add_topic' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(topic_btn)).click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 500) name_tag = 'com.quvideo.xiaoying:id/txtview_tag_name' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(name_tag)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('隐私设置') privacy_btn = 'com.quvideo.xiaoying:id/share_btn_privacy' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(privacy_btn)).click() vis_btn = 'com.quvideo.xiaoying:id/private_setting_visible_btn' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(vis_btn)).click() down_btn = 'com.quvideo.xiaoying:id/private_setting_candnload_btn' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(down_btn)).click() pos_btn = 'com.quvideo.xiaoying:id/buttonDefaultPositive' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(pos_btn)).click() sc.logger.info('导出-导出页编辑测试完成') def test_share_upload(self): """导出-分享上传.""" sc.logger.info('导出-分享上传') fun_name = 'test_share_upload' share_btn = 'com.quvideo.xiaoying:id/share_btn_share' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(share_btn)).click() sc.capture_screen(fun_name, self.img_path) clear_btn = 'com.quvideo.xiaoying:id/normal_layout' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(clear_btn)).click() try: neg_btn = 'com.quvideo.xiaoying:id/buttonDefaultNegative' WebDriverWait( sc.driver, 5).until(lambda el: el.find_element_by_id(neg_btn)).click() except TimeoutException: sc.logger.info('硬件加速已经打开') try: qq_sns = 'com.quvideo.xiaoying:id/textview_id_sns_qqspace' WebDriverWait( sc.driver, 120).until(lambda el: el.find_element_by_id(qq_sns)).click() time.sleep(5) sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) except TimeoutError as t: sc.logger.error('导出视频超时', t) sc.driver.press_keycode(4) return False time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('导出-分享上传完成')
class TestCreationExport(object): """ 创作页面内导出视频相关的测试类. 1.执行导出用例时,请确认当前app未进行过导出操作 2.使用已购买会员账号登录 """ width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def hardware_acceleration(cls): """硬件加速设置.""" try: sc.logger.info('尝试开启硬件加速') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("视频处理硬件加速")')).click() except TimeoutException: sc.logger.info('未找到硬件加速选项,上滑半屏尝试') start_x = cls.width // 2 start_y = cls.height // 8 start_bottom = cls.height - start_y sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.4, 600) WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("视频处理硬件加速")')).click() time.sleep(1) sc.driver.press_keycode(4) @classmethod def restore_purchase(cls): """用来处理恢复购买.""" try: sc.logger.info('尝试恢复购买') vip_btn = 'com.quvideo.xiaoying:id/privilege_to_be_vip' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(vip_btn)).click() restore_btn = 'com.quvideo.xiaoying:id/vip_home_restore_button' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(restore_btn)).click() close_btn = 'com.quvideo.xiaoying:id/vip_home_close' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(close_btn)).click() except TimeoutException: sc.logger.info('无需设置恢复购买') def test_export_create(self): """导出-创建视频.""" sc.logger.info('导出-创建视频') fun_name = 'test_export_create' start_x = self.width // 2 start_bottom = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“拍摄”') sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon2').click() sc.logger.info('点击录制按钮') el_cp = sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_rec') # 长按拍摄 sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认按钮') time.sleep(1) next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' sc.driver.find_element_by_id(next_btn).click() sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 1000) sc.driver.find_element_by_android_uiautomator('text("保存/上传")').click() sc.logger.info('导出-创建视频完成') def test_export_first(self): """导出-保存到相册-480P-首次导出.""" sc.logger.info('导出-保存到相册-480P-首次导出') fun_name = 'test_export_first' sc.logger.info('点击“保存到相册”') export_btn = 'com.quvideo.xiaoying:id/btn_export' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(export_btn)).click() # sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_export').click() try: pos_btn = 'com.quvideo.xiaoying:id/buttonDefaultPositive' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(pos_btn)).click() TestCreationExport.hardware_acceleration() WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(export_btn)).click() except TimeoutException: sc.logger.info('无需设置硬件加速') sc.logger.info('点击“480P 清晰”') limit_btn = 'com.quvideo.xiaoying:id/normal_layout' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(limit_btn)).click() try: WebDriverWait(sc.driver, 20).until( lambda x: x.find_element_by_android_uiautomator('text("工作室")')) sc.capture_screen(fun_name, self.img_path) except TimeoutException: sc.driver.press_keycode(4) time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('导出-保存到相册-480P-首次导出测试完成') def test_export_second(self): """导出-保存到相册-720P-二次导出.""" sc.logger.info('导出-保存到相册-720P-二次导出') fun_name = 'test_export_second' sc.logger.info('点击“更多草稿”') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("更多草稿")')).click() # sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击第一个草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('点击“保存/上传”') sc.driver.find_element_by_android_uiautomator('text("保存/上传")').click() sc.logger.info('点击“保存到相册”') export_btn = 'com.quvideo.xiaoying:id/btn_export' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(export_btn)).click() try: hd_title = 'com.quvideo.xiaoying:id/purchase_hd_title' sc.driver.find_element_by_id(hd_title).click() TestCreationExport.restore_purchase() WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(export_btn)).click() sc.driver.find_element_by_id(hd_title).click() except NoSuchElementException: sc.logger.info('当前设备不支持720P导出') sc.logger.info('返回创作中心主界面') for i in range(5): time.sleep(1) sc.driver.press_keycode(4) return True try: WebDriverWait(sc.driver, 60).until( lambda x: x.find_element_by_android_uiautomator('text("工作室")')) sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) time.sleep(1) sc.driver.press_keycode(4) except NoSuchElementException: sc.driver.find_element_by_android_uiautomator('text("分享小影")') sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) except TimeoutError as t: sc.logger.error('导出视频超时', t) return False sc.logger.info('导出-保存到相册-720P-二次导出测试完成') def test_export_third(self): """导出-保存到相册-1080P-三次导出.""" sc.logger.info('导出-保存到相册-1080P') fun_name = 'test_export_third' sc.logger.info('点击“更多草稿”') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("更多草稿")')).click() sc.logger.info('点击第一个草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.driver.find_element_by_android_uiautomator('text("保存/上传")').click() export_btn = 'com.quvideo.xiaoying:id/btn_export' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(export_btn)).click() try: fhd_title = 'com.quvideo.xiaoying:id/purchase_hd_1080_title' sc.driver.find_element_by_id(fhd_title).click() except NoSuchElementException: sc.logger.info('当前设备不支持1080P导出') sc.logger.info('返回创作中心主界面') for i in range(5): time.sleep(1) sc.driver.press_keycode(4) return True try: WebDriverWait(sc.driver, 60).until( lambda x: x.find_element_by_android_uiautomator('text("工作室")')) sc.capture_screen(fun_name, self.img_path) left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' sc.driver.find_element_by_id(left_btn).click() except TimeoutError as t: sc.logger.error('导出视频超时', t) return False sc.logger.info('导出-保存到相册-1080P测试完成') def test_export_gif(self): """导出-保存到相册-GIF.""" sc.logger.info('导出-保存到相册-GIF') fun_name = 'test_export_gif' sc.logger.info('点击“更多草稿”') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("更多草稿")')).click() sc.logger.info('点击第一个草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('点击“保存/上传”') sc.driver.find_element_by_android_uiautomator('text("保存/上传")').click() sc.logger.info('点击“保存到相册”') export_btn = 'com.quvideo.xiaoying:id/btn_export' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(export_btn)).click() try: sc.logger.info('点击“GIF”') gif_title = 'com.quvideo.xiaoying:id/gif_layout' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(gif_title)).click() except NoSuchElementException: sc.logger.info('当前版本不支持GIF导出') return True sc.logger.info('点击“导出”按钮') share_btn = 'com.quvideo.xiaoying:id/share_btn_share' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(share_btn)).click() try: WebDriverWait(sc.driver, 20).until( lambda x: x.find_element_by_android_uiautomator('text("工作室")')) sc.capture_screen(fun_name, self.img_path) left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(left_btn)).click() except TimeoutError as t: sc.logger.error('导出GIF超时', t) sc.driver.press_keycode(4) sc.capture_screen(fun_name, self.img_path) pos_btn = 'com.quvideo.xiaoying:id/buttonDefaultPositive' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(pos_btn)).click() sc.logger.info('返回创作中心主界面') for i in range(4): time.sleep(1) sc.driver.press_keycode(4) return False sc.logger.info('导出-保存到相册-GIF测试完成')
class TestCameraNormal(object): """camera的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] c_btn = 'com.quvideo.xiaoying:id/img_creation' def test_normal_filter_download(self): """拍摄-滤镜下载.""" sc.logger.info('拍摄-滤镜下载') fun_name = 'test_normal_filter_download' effect_btn = 'com.quvideo.xiaoying:id/cam_btn_filter_effect' sc.logger.info('点击创作中心主按钮') sc.first_step(self.c_btn) sc.logger.info('点击“拍摄”') sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon2').click() sc.logger.info('点击滤镜图标') sc.driver.find_element_by_id(effect_btn).click() try: filter_down_btn = 'com.quvideo.xiaoying:id/icon_filter_download' el_filter_download = sc.driver.find_element_by_id(filter_down_btn) sc.logger.info('点击下载按钮') el_filter_download.click() try: WebDriverWait(sc.driver, 30).until( lambda download_flt: download_flt.find_element_by_id( 'com.quvideo.xiaoying:id/item_fitler_child_cover')) except Exception as e: sc.logger.error('滤镜下载失败', e) except NoSuchElementException: filter_p_btn = 'com.quvideo.xiaoying:id/item_fitler_parent_cover' el_filter_list = sc.driver.find_elements_by_id(filter_p_btn) sc.logger.info('点击第三个滤镜主题') el_filter_list[2].click() time.sleep(1) filter_cover_btn = 'com.quvideo.xiaoying:id/item_fitler_child_cover' el_child_filter = sc.driver.find_element_by_id(filter_cover_btn) sc.logger.info('点击第一个滤镜') el_child_filter.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('退出滤镜选项') sc.driver.press_keycode(4) time.sleep(1) sc.logger.info('返回创作中心主界面') sc.driver.press_keycode(4) sc.logger.info('拍摄-滤镜下载测试完成') def test_camera_normal_settings(self): """拍摄-设置相关.""" sc.logger.info('拍摄-设置相关') fun_name = 'test_camera_normal_settings' sc.logger.info('点击“拍摄”') s_btn = 'com.quvideo.xiaoying:id/icon2' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(s_btn)).click() sc.logger.info('点击设置按钮') setting_btn = 'com.quvideo.xiaoying:id/cam_btn_setting' sc.driver.find_element_by_id(setting_btn).click() sc.find_by_classes('android.widget.ImageView', fun_name, self.img_path) sc.logger.info('退出设置选项') sc.driver.press_keycode(4) sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('拍摄-设置相关测试完成') def test_camera_normal_shot(self): """拍摄-高清相机(全屏).""" sc.logger.info('拍摄-高清相机(全屏)') fun_name = 'test_camera_normal_shot' sc.logger.info('点击“拍摄”') s_btn = 'com.quvideo.xiaoying:id/icon2' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(s_btn)).click() sc.logger.info('点击摄像头切换按钮') switch_btn = 'com.quvideo.xiaoying:id/img_switch' sc.driver.find_element_by_id(switch_btn).click() time.sleep(2) el_cp = sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_rec') # 长按拍摄 sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) """ sc.logger.info('点击撤销按钮两次') sc.driver.find_element_by_android_uiautomator('text("撤销")').click() time.sleep(2) sc.driver.find_element_by_android_uiautomator('text("撤销")').click() sc.capture_screen(fun_name, self.img_path) """ sc.logger.info('点击确认按钮') time.sleep(1) next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' sc.driver.find_element_by_id(next_btn).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() sc.logger.info('点击左上角返回按钮退回创作中心') left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' sc.driver.find_element_by_id(left_btn).click() sc.logger.info('拍摄-高清相机拍摄完成')
class TestEditMusic(object): """音乐相关操作测试测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_music_add(self): """剪辑-多段配乐-添加.""" sc.logger.info('剪辑-多段配乐-添加') fun_name = 'test_music_add' start_x = self.width // 2 start_bottom = self.height // 4 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击多段配乐') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("多段配乐")')).click() m_add_btn = 'com.quvideo.xiaoying:id/tv_editor_audio_operation' sc.logger.info('点击添加音乐按钮') el_op = WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(m_add_btn)) if el_op.text == '删除': sc.logger.info('当前视频已经有配乐,删除原有音乐') el_op.click() el_op.click() sc.logger.info('下载音乐') download_btn = 'com.quvideo.xiaoying:id/music_item_download' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(download_btn)).click() sc.logger.info('添加音乐') music_name = 'com.quvideo.xiaoying:id/music_item_name' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(music_name)).click() while True: try: state_btn = 'com.quvideo.xiaoying:id/music_item_play_state' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(state_btn)).click() sc.logger.info('点击播放状态') break except TimeoutException: WebDriverWait(sc.driver, 5, 1).until(lambda c_btn: c_btn.find_element_by_id( music_name)).click() sc.logger.info('使用音乐') use_btn = 'com.quvideo.xiaoying:id/music_item_use' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(use_btn)).click() time.sleep(1) sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 500) sc.logger.info('点击“完成”') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(m_add_btn)).click() sc.logger.info('点击确认箭头按钮') right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-多段配乐-添加测试完成') def test_edit_music_del(self): """剪辑-多段配乐-删除.""" sc.logger.info('剪辑-多段配乐-删除') fun_name = 'test_camera_music_del' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击多段配乐') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("多段配乐")')).click() m_add_btn = 'com.quvideo.xiaoying:id/tv_editor_audio_operation' sc.logger.info('点击添加删除配乐按钮') el_op = WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(m_add_btn)) if el_op.text == '删除': sc.logger.info('当前视频已经有配乐,删除原有音乐') el_op.click() else: sc.logger.info('当前视频没有配乐,无需删除') sc.logger.info('点击确认箭头按钮') right_btn = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(right_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-多段配乐-删除测试完成') def test_edit_music_cancel(self): """剪辑-多段配乐-放弃.""" sc.logger.info('剪辑-多段配乐-放弃') fun_name = 'test_camera_music_cancel' start_x = self.width // 2 start_bottom = self.height // 4 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击多段配乐') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("多段配乐")')).click() m_add_btn = 'com.quvideo.xiaoying:id/tv_editor_audio_operation' sc.logger.info('点击添加音乐按钮') el_op = WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(m_add_btn)) if el_op.text == '删除': sc.logger.info('当前视频已经有配乐,删除原有音乐') el_op.click() el_op.click() sc.logger.info('下载音乐') download_btn = 'com.quvideo.xiaoying:id/music_item_download' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(download_btn)).click() sc.logger.info('添加音乐') music_name = 'com.quvideo.xiaoying:id/music_item_name' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(music_name)).click() while True: try: state_btn = 'com.quvideo.xiaoying:id/music_item_play_state' WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_id(state_btn)).click() sc.logger.info('点击播放状态') break except TimeoutException: WebDriverWait(sc.driver, 5, 1).until(lambda c_btn: c_btn.find_element_by_id( music_name)).click() sc.logger.info('使用音乐') use_btn = 'com.quvideo.xiaoying:id/music_item_use' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(use_btn)).click() time.sleep(1) sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 500) WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(m_add_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击放弃操作按钮') left_btn = 'com.quvideo.xiaoying:id/terminator_left' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(left_btn)).click() WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(left_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认放弃操作') pos_btn = 'com.quvideo.xiaoying:id/xiaoying_alert_dialog_positive' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(pos_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-多段配乐-放弃测试完成')
class TestGallery(object): """Gallery的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_gallery_video(self): """相册-视频.""" sc.logger.info('相册-视频') fun_name = 'test_gallery_video' start_x = self.width // 2 start_bottom = self.height - self.height // 4 start_y = self.height // 3 sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“剪辑”') sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon1').click() time.sleep(1) try: sc.driver.find_element_by_android_uiautomator('text("跳过")').click() first_icon = 'com.quvideo.xiaoying:id/icon1' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(first_icon)).click() except NoSuchElementException: sc.logger.info('已跳过订阅页面') sc.logger.info('点击“其它相册”') sc.driver.find_element_by_android_uiautomator('text("其他相册")').click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_android_uiautomator('text("全部")').click() time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 500) mask_img = 'com.quvideo.xiaoying:id/img_click_mask' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(mask_img)).click() sc.capture_screen(fun_name, self.img_path) rotate_btn = 'com.quvideo.xiaoying:id/imgbtn_ratate' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(rotate_btn)).click() try: crop_btn = 'com.quvideo.xiaoying:id/imgbtn_crop' sc.driver.find_element_by_id(crop_btn).click() except NoSuchElementException: sc.logger.info('视频尺寸1:1,无此选项') trip_btn = 'com.quvideo.xiaoying:id/btn_start_trim' sc.driver.find_element_by_id(trip_btn).click() import_btn = 'com.quvideo.xiaoying:id/imgbtn_import' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(import_btn)).click() sc.capture_screen(fun_name, self.img_path) try: n_btn = 'com.quvideo.xiaoying:id/xiaoying_com_storyboard_next_btn' WebDriverWait(sc.driver, 60).until( lambda x: x.find_element_by_id(n_btn)).click() except TimeoutError as t: sc.logger.error('导入视频超时', t) return False except Exception as e: sc.logger.error('导入视频出错', e) return False sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(left_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('相册-视频相关操作测试完成') def test_gallery_img(self): """相册-图片.""" sc.logger.info('相册-图片') fun_name = 'test_gallery_img' start_x = self.width // 2 start_y = self.height // 3 first_icon = 'com.quvideo.xiaoying:id/icon1' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(first_icon)).click() # sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon1').click() sc.driver.find_element_by_android_uiautomator('text("视频")').click() sc.driver.find_element_by_android_uiautomator('text("图片")').click() sc.driver.find_element_by_android_uiautomator('text("其他相册")').click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_android_uiautomator('text("全部")').click() mask_img = 'com.quvideo.xiaoying:id/img_click_mask' element_list = sc.driver.find_elements_by_id(mask_img) if len(element_list) >= 2: element_list = element_list[:2] for element_em in element_list: element_em.click() time.sleep(1) sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_android_uiautomator('text("下一步")').click() sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(left_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('相册-图片相关操作测试完成') def test_gallery_storyboard(self): """相册-storyboard.""" sc.logger.info('相册-storyboard') fun_name = 'test_gallery_storyboard' first_icon = 'com.quvideo.xiaoying:id/icon1' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(first_icon)).click() mask_img = 'com.quvideo.xiaoying:id/img_click_mask' el_video_list = sc.driver.find_elements_by_id(mask_img) for i in range(2): import_btn = 'com.quvideo.xiaoying:id/imgbtn_import' el_video_list[i].click() sc.driver.find_element_by_id(import_btn).click() try: WebDriverWait(sc.driver, 60).until( lambda el: el.find_element_by_android_uiautomator( 'text("下一步")')) except TimeoutError as t: sc.logger.error('导入视频超时', t) return False except Exception as e: sc.logger.error('导入视频出错', e) return False sc.driver.find_element_by_android_uiautomator('text("视频")').click() sc.driver.find_element_by_android_uiautomator('text("图片")').click() img_icon = 'com.quvideo.xiaoying:id/img_icon' element_list = sc.driver.find_elements_by_id(img_icon) if len(element_list) >= 2: element_list = element_list[:2] for element_em in element_list: element_em.click() time.sleep(1) sc.capture_screen(fun_name, self.img_path) expand_btn = 'com.quvideo.xiaoying:id/btn_expand' sc.driver.find_element_by_id(expand_btn).click() del_img = 'com.quvideo.xiaoying:id/img_delete' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(del_img)).click() sc.capture_screen(fun_name, self.img_path) left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' sc.driver.find_element_by_id(left_btn).click() sc.driver.find_element_by_android_uiautomator('text("保存")').click() sc.capture_screen(fun_name, self.img_path) WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(left_btn)).click() sc.logger.info('相册-storyboard相关操作测试完成') def test_gallery_giveup(self): """相册-放弃操作.""" sc.logger.info('相册-放弃操作') fun_name = 'test_gallery_giveup' start_x = self.width // 2 start_bottom = self.height - self.height // 4 first_icon = 'com.quvideo.xiaoying:id/icon1' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(first_icon)).click() mask_img = 'com.quvideo.xiaoying:id/img_click_mask' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(mask_img)).click() sc.capture_screen(fun_name, self.img_path) left_btn = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' sc.driver.find_element_by_id(left_btn).click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_android_uiautomator('text("视频")').click() sc.driver.find_element_by_android_uiautomator('text("图片")').click() sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 500) img_icon = 'com.quvideo.xiaoying:id/img_icon' element_list = sc.driver.find_elements_by_id(img_icon) if len(element_list) >= 2: element_list = element_list[:2] for element_em in element_list: element_em.click() time.sleep(1) sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_id(left_btn).click() sc.driver.find_element_by_android_uiautomator('text("丢弃")').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('相册-放弃操作相关操作测试完成')
class TestPreviewTheme(object): """预览页面的theme测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_theme_ui(self): """预览页-切换到主题页面.""" sc.logger.info('预览页-切换到主题页面') start_x = self.width // 2 start_bottom = self.height // 3 fun_name = 'test_theme_ui' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“剪辑”') sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon1').click() click_mask = 'com.quvideo.xiaoying:id/img_click_mask' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(click_mask)).click() sc.logger.info('点击“添加”') import_btn = 'com.quvideo.xiaoying:id/imgbtn_import' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(import_btn)).click() try: WebDriverWait(sc.driver, 60).until( lambda el: el.find_element_by_android_uiautomator( 'text("下一步")')).click() except TimeoutError as t: sc.logger.error('导入视频超时', t) return False except Exception as e: sc.logger.error('导入视频出错', e) return False time.sleep(1) sc.driver.swipe(start_x, start_bottom, start_x, start_bottom, 1000) sc.logger.info('点击“主题”按钮') WebDriverWait(sc.driver, 60).until( lambda el: el.find_element_by_android_uiautomator( 'text("主题")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('预览页-切换到主题页面') def test_theme_download(self): """预览页-主题下载.""" sc.logger.info('预览页-主题下载') fun_name = 'test_theme_download' start_x = self.width // 4 start_bottom = self.height - self.height // 10 start_y = self.height // 3 time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'right', 0.5, 500) sc.logger.info('点击“下载更多”') thumb_bg = 'com.quvideo.xiaoying:id/imgview_get_more_thumbnail_bg' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(thumb_bg)).click() try: sc.logger.info('点击“使用”按钮') u_btn = 'com.quvideo.xiaoying:id/template_caption_grid_btn_update' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(u_btn)).click() time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) except TimeoutException: sc.logger.info('点击下载按钮') sc.capture_screen(fun_name, self.img_path) down_btn = 'com.quvideo.xiaoying:id/imgbtn_download' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(down_btn)).click() try: WebDriverWait(sc.driver, 30).until( lambda el: el.find_element_by_android_uiautomator( 'text("使用")')).click() time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) except TimeoutError as t: sc.logger.error('素材下载超时', t) sc.logger.info('返回创作中心主界面') for i in range(4): time.sleep(1) sc.driver.press_keycode(4) return False except Exception as e: sc.logger.info('返回创作中心主界面') for i in range(4): time.sleep(1) sc.driver.press_keycode(4) sc.logger.error('素材下载失败', e) return False sc.logger.info('返回创作中心主界面') for i in range(3): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('预览页-主题测试完成')
class TestPreviewMusic(object): """预览页面的music测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_music_create(self): """导出-创建视频.""" sc.logger.info('分享-创建视频') fun_name = 'test_music_create' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“拍摄”') sc.driver.find_element_by_id('com.quvideo.xiaoying:id/icon2').click() el_cp = sc.driver.find_element_by_id('com.quvideo.xiaoying:id/btn_rec') # 长按拍摄 sc.logger.info('长按拍摄5s') actions = TouchAction(sc.driver) actions.long_press(el_cp, None, None, 5000).release().perform() sc.capture_screen(fun_name, self.img_path) next_btn = 'com.quvideo.xiaoying:id/cam_btn_next' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(next_btn)).click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("存草稿")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('分享-创建视频完成') def test_music_add(self): """预览页-配乐.""" sc.logger.info('预览页-配乐') start_x = self.width // 2 start_y = self.height // 3 fun_name = 'test_music_add' sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' sc.driver.find_element_by_id(draft_img).click() sc.logger.info('点击“配乐”') sc.driver.find_element_by_android_uiautomator('text("配乐")').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击添加配乐') try: del_icon = 'com.quvideo.xiaoying:id/imgbtn_del_music' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(del_icon)).click() sc.capture_screen(fun_name, self.img_path) except TimeoutException: bgm_row = 'com.quvideo.xiaoying:id/txtview_bgm_name' sc.driver.find_element_by_id(bgm_row).click() sc.logger.info('下载音乐') music_item_download = 'com.quvideo.xiaoying:id/music_item_download' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(music_item_download)).click() sc.logger.info('添加音乐') time.sleep(5) music_item_name = 'com.quvideo.xiaoying:id/music_item_name' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(music_item_name)).click() while True: try: state_btn = 'com.quvideo.xiaoying:id/music_item_play_state' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(state_btn)).click() sc.logger.info('点击播放状态') break except TimeoutException: WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(music_item_name)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('使用音乐') use_btn = 'com.quvideo.xiaoying:id/music_item_use' sc.driver.find_element_by_id(use_btn).click() time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击声音按钮') video_icon = 'com.quvideo.xiaoying:id/imgview_icon_video' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(video_icon)).click() sc.logger.info('点击音乐按钮') bgm_icon = 'com.quvideo.xiaoying:id/imgview_icon_bgm' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(bgm_icon)).click() sc.logger.info('点击删除音乐按钮') del_icon = 'com.quvideo.xiaoying:id/imgbtn_del_music' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(del_icon)).click() time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) sc.capture_screen(fun_name, self.img_path) sc.logger.info('预览页-配乐测试完成') def test_preview_recommend(self): """音乐库-推荐音乐下载.""" sc.logger.info('音乐库-推荐音乐下载') fun_name = 'test_preview_recommend' start_x = self.width // 2 start_bottom = self.height - self.height // 4 sc.logger.info('点击添加配乐') b_btn = 'com.quvideo.xiaoying:id/txtview_bgm_name' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(b_btn)).click() # 推荐音乐下载 while True: try: sc.driver.find_element_by_android_uiautomator( 'text("没有更多了…")').click() break except NoSuchElementException: sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 600) sc.logger.info('下载音乐') music_item_download = 'com.quvideo.xiaoying:id/music_item_download' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(music_item_download)).click() time.sleep(5) sc.capture_screen(fun_name, self.img_path) sc.logger.info('音乐库-推荐音乐下载测试完成') def test_preview_other(self): """音乐库-其他分类音乐下载.""" sc.logger.info('音乐库-其他分类音乐下载') fun_name = 'test_preview_other' start_x = self.width - self.width // 5 start_bottom = self.height // 2 # 切换到流行分类 time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.7, 500) sc.logger.info('点击第一个可下载按钮') sc.logger.info('下载音乐') music_item_download = 'com.quvideo.xiaoying:id/music_item_download' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(music_item_download)).click() time.sleep(5) sc.capture_screen(fun_name, self.img_path) sc.logger.info('音乐库-其他分类音乐下载测试完成') def test_preview_use(self): """音乐库-使用已下载音乐.""" sc.logger.info('音乐库-使用已下载音乐') start_x = self.width // 2 start_y = self.height // 3 fun_name = 'test_preview_use' sc.logger.info('点击“已下载”tab') sc.driver.find_element_by_android_uiautomator('text("已下载")').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加音乐') music_item_name = 'com.quvideo.xiaoying:id/music_item_name' WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(music_item_name)).click() state_btn = 'com.quvideo.xiaoying:id/music_item_play_state' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(state_btn)).click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_android_uiautomator('text("添加")').click() time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) sc.capture_screen(fun_name, self.img_path) sc.logger.info('音乐库-使用已下载音乐测试完成') def test_preview_delete(self): """音乐库-删除已下载音乐.""" sc.logger.info('音乐库-删除已下载音乐') fun_name = 'test_preview_delete' b_btn = 'com.quvideo.xiaoying:id/txtview_bgm_name' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(b_btn)).click() sc.logger.info('点击删除按钮') rubbish_icon = 'com.quvideo.xiaoying:id/music_rubbish_icon' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(rubbish_icon)).click() sc.logger.info('依次选择已下载音乐') check_item = 'com.quvideo.xiaoying:id/music_item_check_box' sc.find_by_ids(check_item, fun_name, self.img_path) sc.logger.info('再次点击删除按钮') WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(rubbish_icon)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('音乐库-删除已下载音乐测试完成') def test_preview_local(self): """音乐库-使用本地音乐.""" sc.logger.info('音乐库-使用本地音乐') start_x = self.width // 2 start_y = self.height // 3 fun_name = 'test_preview_local' sc.driver.find_element_by_android_uiautomator('text("本地")').click() sc.capture_screen(fun_name, self.img_path) music_item_name = 'com.quvideo.xiaoying:id/music_item_name' m_list = sc.driver.find_elements_by_id(music_item_name) try: m_list[0].click() except Exception: sc.logger.info('本地音乐不存在!返回创作中心主界面。') for i in range(4): time.sleep(1) sc.driver.press_keycode(4) return True state_btn = 'com.quvideo.xiaoying:id/music_item_play_state' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(state_btn)).click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_android_uiautomator('text("添加")').click() time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() left_icon = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(left_icon)).click() sc.logger.info('音乐库-使用本地音乐测试完成') def test_preview_time(self): """预览页-时长.""" sc.logger.info('预览页-时长') fun_name = 'test_preview_time' start_x = self.width // 2 start_y = self.height // 3 sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“相册MV') WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("相册MV")')).click() sc.logger.info('添加图片') click_mask = 'com.quvideo.xiaoying:id/img_click_mask' element_list = sc.driver.find_elements_by_id(click_mask) if len(element_list) >= 2: element_list = element_list[:2] for element_em in element_list: element_em.click() time.sleep(1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“下一步”') sc.driver.find_element_by_android_uiautomator('text("下一步")').click() time.sleep(1) sc.driver.swipe(start_x, start_y, start_x, start_y, 1000) sc.logger.info('点击“时长”') sc.driver.find_element_by_android_uiautomator('text("时长")').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”') sc.driver.find_element_by_android_uiautomator('text("存草稿")').click() sc.logger.info('点击左上角返回创作中心主界面') left_icon = 'com.quvideo.xiaoying:id/xiaoying_com_btn_left' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(left_icon)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('预览页-时长测试完成')
class TestCircleSearch(object): """小影圈搜索页的测试类,分步截图.""" width, heigh = sc.get_size() img_path = sc.path_lists[0] def test_search_page(self): """小影圈搜索页面输入状态测试.""" sc.logger.info('小影圈搜索页面输入状态测试开始') fun_name = 'test_search_page' start_x = self.width // 2 start_bottom = self.heigh - self.heigh // 8 sc.logger.info('点击小影圈主按钮') p_btn = 'com.quvideo.xiaoying:id/img_find' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(p_btn)).click() sc.logger.info('开始查找小影圈搜索按钮') search_btn = 'com.quvideo.xiaoying:id/btn_search' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(search_btn)).click() sc.logger.info('开始向小影圈搜索框输入字符a') search_frame = 'com.quvideo.xiaoying:id/edittext_search' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(search_frame)).click() sc.driver.press_keycode(29) sc.logger.info('小影圈搜索框输入文字"a"截图开始') sc.capture_screen(fun_name, self.img_path) # sc.driver.hide_keyboard() # sc.driver.press_keycode(4) sc.logger.info('开始查找输入框补全内容') keyword_frame = 'com.quvideo.xiaoying:id/textview_keyword' sc.logger.info('点击第一条自动联想内容') WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(keyword_frame)).click() time.sleep(2) sc.logger.info('开始查找搜索结果中的用户') res_user_id = 'com.quvideo.xiaoying:id/img_simple_user_avatar_click' WebDriverWait(sc.driver, 10, 1).until(lambda el: el.find_element_by_id(res_user_id)) sc.logger.info('开始查找搜索结果中的视频') res_video_id = 'com.quvideo.xiaoying:id/xiaoying_com_img_video_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(res_video_id)).click() sc.logger.info('小影圈搜索结果截图') sc.capture_screen(fun_name, self.img_path) sc.logger.info('小影圈搜索结果下滑截图') time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 500) sc.capture_screen(fun_name, self.img_path) def test_search_result(self): """小影圈搜索结果测试,为了简化流程,请与上一条连起来用.""" sc.logger.info('小影圈搜索结果测试开始') fun_name = 'test_search_result' start_x = self.width - self.width // 4 start_bottom = self.heigh - self.heigh // 8 # 左滑一次 sc.logger.info('开始左滑至“视频”页面') time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.7, 500) time.sleep(1) sc.logger.info('开始查找搜索结果视频页面中的视频') res_video_id = 'com.quvideo.xiaoying:id/xiaoying_com_img_video_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(res_video_id)).click() sc.logger.info('小影圈搜索结果视频页面截图') sc.capture_screen(fun_name, self.img_path) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.4, 500) time.sleep(1) sc.logger.info('小影圈搜索结果视频页面下滑截图') sc.capture_screen(fun_name, self.img_path) # 再左滑一次 sc.logger.info('开始滑动至“用户”页面') sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.7, 500) sc.logger.info('开始查找搜索结果用户页面中的第一个用户') res_user_id = 'com.quvideo.xiaoying:id/fans_name' WebDriverWait(sc.driver, 10, 1).until(lambda el: el.find_element_by_id(res_user_id)) sc.logger.info('小影圈搜索结果用户页面截图') sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.3, 500) sc.logger.info('小影圈搜索结果用户界面下滑截图') sc.capture_screen(fun_name, self.img_path) def test_search_follow(self): """小影圈搜索结果中的关注测试,为了简化流程,请与上一条连起来用.""" sc.logger.info('小影圈搜索结果,关注测试开始') fun_name = 'test_search_follow' start_x = self.width // 4 start_bottom = self.heigh // 2 # 查找用户关注按钮 time.sleep(1) sc.logger.info('开始查找搜索结果用户页面中的第一个用户关注按钮') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.3, 500) WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("关注")')).click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("已关注")')).click() sc.logger.info('小影圈搜索结果,用户页面关注情况截图') sc.capture_screen(fun_name, self.img_path) # 取消关注 sc.logger.info('开始取消关注') pos_btn = 'com.quvideo.xiaoying:id/buttonDefaultPositive' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(pos_btn)).click() sc.logger.info('小影圈搜索结果,用户页面取消关注后情况截图') sc.capture_screen(fun_name, self.img_path) def test_search_history(self): """小影圈搜索页面历史记录搜索测试,为了简化流程,请与上一条连起来用.""" sc.logger.info('小影圈搜索页面历史记录搜索测试开始') fun_name = 'test_search_history' time.sleep(1) sc.logger.info('开始查找搜索框') search_frame = 'com.quvideo.xiaoying:id/edittext_search' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(search_frame)).click() sc.logger.info('开始查找清除输入按钮') clear_btn = 'com.quvideo.xiaoying:id/btn_clear_edit' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(clear_btn)).click() time.sleep(1) sc.logger.info('小影圈搜索框历史记录截图开始') sc.capture_screen(fun_name, self.img_path) sc.logger.info('开始查找第一条历史记录') res_his_id = 'com.quvideo.xiaoying:id/text_history_list_item' sc.logger.info('点击第一条历史记录') WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(res_his_id)).click() sc.logger.info('开始查找历史记录搜索结果中的视频') try: video_id = 'com.quvideo.xiaoying:id/xiaoying_com_img_video_thumb' el_res_video = sc.driver.find_element_by_id(video_id) except NoSuchElementException: video_desc = 'com.quvideo.xiaoying:id/xiaoying_com_text_video_desc' el_res_video = sc.driver.find_elements_by_id(video_desc) sc.logger.info('小影圈历史记录搜索结果截图') sc.capture_screen(fun_name, self.img_path) sc.logger.info('测试完成返回主页') sc.driver.press_keycode(4) assert el_res_video is not None
class TestUserFollow(object): """测试用户空间关注页的测试类,分步截图.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_user_follows(self): """测试用户空间关注页面的初始状态.""" sc.logger.info('用户空间关注页面初始状态检查测试开始') fun_name = 'test_user_follows' sc.logger.info('点击个人中心主按钮') p_btn = 'com.quvideo.xiaoying:id/img_studio' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(p_btn)).click() el_tab_list = sc.driver.find_elements_by_id( 'com.quvideo.xiaoying:id/text_tab_title') for el_tab in el_tab_list: if el_tab.text == '关注': sc.logger.info('点击“关注”tab') el_tab.click() sc.logger.info('个人空间关注页面初始状态截图开始') sc.capture_screen(fun_name, self.img_path) assert el_tab is not None def test_user_follow_state(self): """关注/取消关注测试.""" sc.logger.info('用户空间关注页面关注状态测试开始') fun_name = 'test_fans_follow' time.sleep(1) btn_follow = 'com.quvideo.xiaoying:id/btn_follow_state' el_btn_follow = sc.driver.find_element_by_id(btn_follow) if el_btn_follow.text == '已关注': sc.logger.info('点击第一个已关注状态按钮') el_btn_follow.click() pos_btn = 'com.quvideo.xiaoying:id/buttonDefaultPositive' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(pos_btn)).click() sc.logger.info('第一次取消点击后,关注状态截图') sc.capture_screen(fun_name, self.img_path) else: sc.logger.info('点击第一个关注状态按钮') el_btn_follow.click() sc.logger.info('第一次点击关注后,关注状态截图') sc.capture_screen(fun_name, self.img_path) assert el_btn_follow is not None def test_user_follow_home(self): """点击关注用户头像进入用户空间测试.""" sc.logger.info('粉丝空间空间测试') fun_name = 'test_user_follow_home' avatar_img = 'com.quvideo.xiaoying:id/avatar_img' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(avatar_img)).click() sc.logger.info('点击粉丝头像后,进入粉丝空间截图') sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) def test_user_follow_list(self): """用户中心关注页面上下滑动测试.""" sc.logger.info('用户中心关注页面上下滑动测试开始') fun_name = 'test_user_follow_list' start_x = self.width // 2 start_y = self.height // 4 start_bottom = self.height - start_y time.sleep(1) # 先上滑 sc.logger.info('上滑截图开始') result_up = sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) time.sleep(1) sc.capture_screen(fun_name, self.img_path) # 再下滑,同理 sc.logger.info('下滑截图开始') result_down = sc.swipe_by_ratio(start_x, start_y, 'down', 0.3, 300) time.sleep(1) sc.capture_screen(fun_name, self.img_path) assert result_up and result_down is True
class TestUserVideos(object): """个人视频详情页的测试类,分步截图.""" width, height = sc.get_size() img_path = sc.path_lists[0] p_btn = 'com.quvideo.xiaoying:id/img_studio' def test_video_origin(self): """video详情页面的初始状态.""" sc.logger.info('video详情页初始状态检查开始') fun_name = 'test_video_origin' sc.logger.info('点击个人中心主按钮') sc.first_step(self.p_btn) sc.logger.info('点击第一个视频标题') el_video_til = 'com.quvideo.xiaoying:id/xiaoying_com_video_card_title' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(el_video_til)).click() sc.logger.info('video详情页面初始状态截图开始') sc.capture_screen(fun_name, self.img_path) def test_video_play(self): """测试视频的播放.""" sc.logger.info('测试视频的暂停/播放/进度条') fun_name = 'test_video_play' time.sleep(1) el_view = 'com.quvideo.xiaoying:id/xiaoying_com_activity_videoview' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(el_view)).click() sc.capture_screen(fun_name, self.img_path) """ def test_video_reply(self): sc.logger.info('开始测试视频的评论功能.') fun_name = 'test_video_reply' start_x = self.width // 2 start_bottom = self.height - self.height // 4 time.sleep(1) # 先上滑半屏,便于处理全屏视频 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) # 查找评论框并输入'QA Reply Test' el_reply_frame = 'com.quvideo.xiaoying:id/comment_editor_view' el_reply = WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_id(el_reply_frame)) sc.logger.info('评论框输入“QA Reply Test”并发送') el_reply.send_keys('QA Reply Test') WebDriverWait(sc.driver, 10, 1).until( lambda el: el.find_element_by_android_uiautomator( 'text("发送")')).click() sc.capture_screen(fun_name, self.img_path) """ def test_video_like(self): """测试视频的点赞功能.""" sc.logger.info('开始测试视频的点赞功能.') fun_name = 'test_video_like' start_x = self.width // 2 start_bottom = self.height - self.height // 4 time.sleep(1) # 先上滑半屏,便于处理全屏视频 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 300) sc.capture_screen(fun_name, self.img_path) btn_like = 'com.quvideo.xiaoying:id/like_btn' sc.driver.find_element_by_id(btn_like).click() sc.capture_screen(fun_name, self.img_path) def test_video_download(self): """测试视频的下载功能.""" sc.logger.info('开始测试视频的下载功能.') fun_name = 'test_video_download' sc.capture_screen(fun_name, self.img_path) down_btn = 'com.quvideo.xiaoying:id/video_detail_download_icon' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(down_btn)).click() sc.capture_screen(fun_name, self.img_path) try: pos_btn = 'com.quvideo.xiaoying:id/buttonDefaultPositive' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(pos_btn)).click() sc.driver.press_keycode(4) except TimeoutException: sc.logger.info('视频下载完成') def test_video_share(self): """测试视频的分享功能.""" sc.logger.info('开始测试视频的分享功能.') fun_name = 'test_video_share' time.sleep(1) sc.capture_screen(fun_name, self.img_path) btn_share = 'com.quvideo.xiaoying:id/btn_share' sc.driver.find_element_by_id(btn_share).click() sc.capture_screen(fun_name, self.img_path)
class TestSettings(object): """设置页面的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_settings_ui(self): """设置:默认值UI遍.""" sc.logger.info('设置:默认UI遍历') fun_name = 'test_settings_ui' sc.logger.info('点击个人中心主按钮') p_btn = 'com.quvideo.xiaoying:id/img_studio' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(p_btn)).click() sc.logger.info('开始进入个人空间截图') sc.capture_screen(fun_name, self.img_path) setting_btn = 'com.quvideo.xiaoying:id/btn_setting' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(setting_btn)).click() el_set_list = sc.driver.find_elements_by_class_name( 'android.widget.TextView') for el_set_content in el_set_list: el_set_content.click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) time.sleep(1) """ try: sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/btn_setting').click() except NoSuchElementException: sc.logger.info('[%s]: 未找到设置按钮', fun_name) """ sc.logger.info('设置选项UI第一页遍历完成') def test_settings_net(self): """设置:自动播放/网络/推送/分享设置.""" sc.logger.info('设置:自动播放/网络/推送/分享设置遍历测试') fun_name = 'test_settings_net' try: sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/btn_setting').click() except NoSuchElementException: sc.logger.info('已经在设置页面了,直接进行下一步') el_net_wifi = WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("只在WIFI网络上传/下载视频")')) sc.logger.info('点击网络设置选项') el_net_wifi.click() sc.logger.info('开始网络设置选项截图') sc.capture_screen(fun_name, self.img_path) try: sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/buttonDefaultPositive').click() except NoSuchElementException: el_net_wifi.click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/buttonDefaultPositive').click() el_net_wifi.click() sc.driver.find_element_by_android_uiautomator( 'new UiSelector().text("接收通知推送")').click() sc.find_by_classes('android.widget.TextView', fun_name, self.img_path) sc.logger.info('通知推送设置遍历完成') sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator( 'new UiSelector().text("分享帐号设置")').click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_back').click() sc.logger.info('网络设置相关测试完成') def test_settings_privacy(self): """设置:隐私设置.""" sc.logger.info('设置:隐私设置') fun_name = 'test_settings_privacy' start_x = self.width // 2 start_bottom = self.height - self.height // 10 WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("私信权限")')).click() sc.find_by_classes('android.widget.TextView', fun_name, self.img_path) sc.logger.info('隐私权限设置遍历完成') WebDriverWait(sc.driver, 10, 1).until(lambda el: el.find_element_by_id( 'com.quvideo.xiaoying:id/img_back')).click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'new UiSelector().text("隐私帐号")')).click() time.sleep(1) try: sc.driver.find_element_by_android_uiautomator( 'new UiSelector().text("水印显示昵称")').click() except NoSuchElementException: sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.3, 500) sc.driver.find_element_by_android_uiautomator( 'new UiSelector().text("水印显示昵称")').click() sc.logger.info('设置:隐私设置测试完成') def test_settings_live(self): """设置:摄像头校正.""" sc.logger.info('设置:摄像头校正') fun_name = 'test_settings_live' start_x = self.width // 2 start_bottom = self.height - self.height // 10 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.3, 500) sc.capture_screen(fun_name, self.img_path) WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'new UiSelector().text("摄像头校正")')).click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'new UiSelector().text("校正前置摄像头")')).click() time.sleep(3) sc.logger.info('校正前置摄像头时截图') sc.capture_screen(fun_name, self.img_path) left_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_rotate_left' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(left_btn)).click() r_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_rotate_right' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(r_btn)).click() h_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_flip_horizontal' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(h_btn)).click() v_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_flip_vertical' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(v_btn)).click() sc.driver.press_keycode(4) WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("摄像头校正")')).click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("校正后置摄像头")')).click() time.sleep(2) sc.logger.info('校正后置摄像头时截图') sc.capture_screen(fun_name, self.img_path) left_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_rotate_left' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(left_btn)).click() r_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_rotate_right' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(r_btn)).click() h_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_flip_horizontal' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(h_btn)).click() v_btn = 'com.quvideo.xiaoying:id/cam_adjust_dialog_btn_flip_vertical' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(v_btn)).click() sc.driver.press_keycode(4) sc.logger.info('设置:摄像头校正测试完成') def test_settings_feedback(self): """设置:意见反馈.""" sc.logger.info('设置:意见反馈') fun_name = 'test_settings_feedback' start_x = self.width // 2 start_bottom = self.height - self.height // 10 time.sleep(2) sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.5, 500) WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("意见反馈")')).click() try: sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/feedback_btn_issue_create').click() except NoSuchElementException: sc.logger.info('当前是第一次反馈') el_question_msg = sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/feedback_question_msg') el_question_msg.send_keys('QA test feedback') sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/feedback_question_type').click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'text("完成")')).click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/feedback_layout_sh_').click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) time.sleep(1) el_qq_contact = sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/feedback_contact_edit_1') el_qq_contact.send_keys('245603638') el_ph_contact = sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/feedback_contact_edit_2') el_ph_contact.send_keys('15857154810') sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_android_uiautomator( 'new UiSelector().text("提交")').click() time.sleep(2) sc.capture_screen(fun_name, self.img_path) """ sc.logger.info('查看反馈') el_feedback = sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/feedback_layout_history_item') el_feedback.click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) """ left_icon = 'com.quvideo.xiaoying:id/feedback_left_icon' WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(left_icon)).click() sc.logger.info('意见反馈测试完成') def test_settings_senior(self): """设置:高级设置和其他.""" sc.logger.info('设置:高级设置和其他') fun_name = 'test_settings_senior' hardware_btn = WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'new UiSelector().text("视频处理硬件加速")')) hardware_btn.click() sc.capture_screen(fun_name, self.img_path) hardware_btn.click() sc.driver.find_element_by_android_uiautomator( 'new UiSelector().text("视频保存位置")').click() sc.driver.press_keycode(4) WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'new UiSelector().text("关于小影")')).click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/img_back').click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'new UiSelector().text("评价小影")')).click() sc.capture_screen(fun_name, self.img_path) sc.driver.press_keycode(4) time.sleep(1) sc.driver.find_element_by_android_uiautomator( 'new UiSelector().text("成为VIP会员")').click() sc.driver.find_element_by_id( 'com.quvideo.xiaoying:id/vip_home_close').click() WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_android_uiautomator( 'new UiSelector().text("恢复购买")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('设置:高级设置和其他测试完成')
class TestEditSticker(object): """动画贴纸的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_sticker_add(self): """剪辑-动画贴纸-添加.""" sc.logger.info('剪辑-动画贴纸-添加') fun_name = 'test_edit_sticker_add' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击贴纸') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("贴纸")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击一张贴纸') stick_class = 'android.widget.RelativeLayout' stick_id = 'com.quvideo.xiaoying:id/item_layout' s_list = sc.driver.find_elements_by_class_name(stick_class) st_list = list() for item in s_list: if item.get_attribute('resourceId') == stick_id: st_list.append(item) st_list[-2].click() sc.capture_screen(fun_name, self.img_path) btn_right = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(btn_right)).click() WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(btn_right)).click() sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-动画贴纸-添加测试完成') def test_edit_sticker_cancel(self): """剪辑-动画贴纸-放弃.""" sc.logger.info('剪辑-动画贴纸-放弃') fun_name = 'test_edit_sticker_cancel' sc.logger.info('点击创作中心主按钮') c_btn = 'com.quvideo.xiaoying:id/img_creation' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(c_btn)).click() sc.logger.info('点击“更多草稿”') sc.driver.find_element_by_android_uiautomator('text("更多草稿")').click() sc.logger.info('点击草稿封面') draft_img = 'com.quvideo.xiaoying:id/xiaoying_studio_img_project_thumb' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(draft_img)).click() sc.logger.info('尝试点击“编辑该视频”') edit_btn = 'com.quvideo.xiaoying:id/edit_this_video_text' try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_id(edit_btn)).click() except TimeoutException: sc.logger.info('该视频已经在编辑页,跳过此步骤') sc.logger.info('点击“效果”') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("效果")')).click() sc.logger.info('开始点击贴纸') WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_android_uiautomator( 'text("贴纸")')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击一张贴纸') stick_class = 'android.widget.RelativeLayout' stick_id = 'com.quvideo.xiaoying:id/item_layout' s_list = sc.driver.find_elements_by_class_name(stick_class) st_list = list() for item in s_list: if item.get_attribute('resourceId') == stick_id: st_list.append(item) st_list[-1].click() sc.capture_screen(fun_name, self.img_path) btn_right = 'com.quvideo.xiaoying:id/terminator_right' WebDriverWait(sc.driver, 10, 1).until( lambda c_btn: c_btn.find_element_by_id(btn_right)).click() btn_left = 'com.quvideo.xiaoying:id/terminator_left' WebDriverWait( sc.driver, 10, 1).until(lambda c_btn: c_btn.find_element_by_id(btn_left)).click() sc.capture_screen(fun_name, self.img_path) pos_btn = 'com.quvideo.xiaoying:id/xiaoying_alert_dialog_positive' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(pos_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') for i in range(2): time.sleep(1) sc.driver.press_keycode(4) sc.logger.info('剪辑-动画贴纸-放弃测试完成')