class TestPreviewAlbum(TestCase): """相册mv测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_preview_time(self): """预览页-时长.""" sc.logger.info('预览页-时长') fun_name = 'test_preview_time' sc.logger.info('相册MV') ba.home_first_click('相册MV') sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加图片') ba.gallery_clip_add('图片', 5) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.logger.info('点击“镜头编辑”') WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name("镜头编辑")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“图片时长”') try: WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name("图片时长")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('应用于全部镜头') sc.driver.find_element_by_name('应用于全部镜头').click() sc.logger.info('点击“确认”') sc.driver.find_element_by_name(iOS_elements.el_confirm_btn).click() sc.capture_screen(fun_name, self.img_path) except TimeoutException: sc.logger.info('当前镜头是gif图片,直接存草稿') sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('预览页-时长测试完成')
class TestEditFilter(TestCase): """编辑滤镜的基本操作测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_edit_filter(self): """剪辑-滤镜.""" sc.logger.info('剪辑-滤镜') fun_name = 'test_edit_filter' sc.logger.info('打开一个草稿视频') ba.home_first_click('更多草稿') sc.logger.info('点击草稿封面') ba.open_draft(iOS_elements.el_studio_draft) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“镜头编辑”') WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name("镜头编辑")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"滤镜"') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name("滤镜")).click() sc.logger.info('点击"下载更多"') btn_more = '下载更多' ba.more_download(btn_more) sc.logger.info('使用滤镜') ba.material_used(iOS_elements.el_store_download2) sc.logger.info('确认添加') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_confirm_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('剪辑-滤镜测试完成')
class TestEditTransition(TestCase): """转场的基本操作测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_edit_transition(self): """剪辑-转场-添加.""" sc.logger.info('剪辑-转场-添加') fun_name = 'test_edit_transition' sc.logger.info('打开一个草稿视频') ba.home_first_click('更多草稿') sc.logger.info('点击草稿封面') ba.open_draft(iOS_elements.el_studio_draft) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“镜头编辑”') WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name("镜头编辑")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“转场icon”') try: WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.btn_transition_icon)).click() sc.capture_screen(fun_name, self.img_path) except TimeoutException: sc.logger.info('只有一个镜头,无法使用转场') return True sc.logger.info('下载并使用转场') ba.clip_transition() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('剪辑-转场-添加测试完成')
class TestPreviewTheme(TestCase): """预览页面的theme测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_preview_theme(self): """预览页-主题页面.""" sc.logger.info('预览页-主题页面') fun_name = 'test_preview_theme' sc.logger.info('打开一个草稿视频') ba.home_first_click('更多草稿') sc.logger.info('点击草稿封面') ba.open_draft(iOS_elements.el_studio_draft) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“主题”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name("主题")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('使用“主题”') try: WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_theme_use)).click() except TimeoutException: sc.logger.info('当前页面无已下载的主题') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_theme_download)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('预览页-主题测试完成')
class TestEditCreate(TestCase): """edit创建视频的测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() # sc.driver.getPageSource() def test_create_draft(self): """创建一个草稿视频.""" sc.logger.info('创建一个草稿视频') fun_name = 'test_create_craft' sc.logger.info('点击创作中心主按钮') ba.home_enter() sc.logger.info('点击“视频剪辑”按钮') WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_home_edit)).click() sc.logger.info('添加视频') ba.gallery_clip_add('视频', 2) sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换到图片') sc.driver.find_element_by_name("视频").click() sc.driver.find_element_by_name("图片").click() sc.logger.info('添加图片') ba.gallery_clip_add('图片', 2) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击下一步') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('创建一个草稿视频完成')
class TestEditClip(TestCase): """镜头编辑相关操作的测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_clip_edit_function(self): """剪辑-镜头编辑-功能遍历.""" sc.logger.info('剪辑-镜头编辑-功能遍历') fun_name = 'test_clip_edit_function' sc.logger.info('点击创作中心主按钮') ba.home_enter() sc.logger.info('点击草稿封面') ba.open_draft(iOS_elements.el_home_draft) sc.capture_screen(fun_name, self.img_path) sc.logger.info('功能遍历') ba.clip_fun_loop() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('剪辑-镜头编辑-功能遍历完成')
class TestCreationExport(TestCase): """ 创作页面内导出视频相关的测试类. 使用已购买会员账号登录 """ width, height = sc.get_size() img_path = sc.path_lists[0] @staticmethod def test_export_01_create(): """导出-创建视频.""" sc.logger.info('导出-创建视频') time.sleep(5) sc.logger.info('点击创作中心主按钮') try: sc.driver.find_element_by_accessibility_id("camerta_n").click() except NoSuchElementException: sc.driver.find_element_by_accessibility_id("camerta_f").click() sc.logger.info('点击"高清拍摄"按钮') try: sc.driver.find_element_by_name("高清拍摄").click() except NoSuchElementException: sc.logger.info('当前版本为测试版,点击默认"拍摄"按钮') sc.driver.find_element_by_name("拍摄").click() # 点拍 sc.logger.info('开始录制') el_capture = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[3]/XCUIElementTypeOther/XCUIElementTypeOther[1]" ) el_capture.click() time.sleep(10) sc.logger.info('录制10s后点击录制按钮停止录制') el_capture.click() sc.logger.info('点击确认按钮进入预览页') sc.driver.find_element_by_name( "vivavideo camera tool icon nex").click() sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_export_02_first(self): """导出-保存到相册-480P.""" sc.logger.info('导出-保存到相册-480P-首次导出') fun_name = 'test_export_first' time.sleep(1) sc.logger.info('进入我的工作室') sc.driver.find_element_by_name("更多草稿").click() time.sleep(0.5) sc.logger.info('保存并上传') el_publish = sc.driver.find_element_by_name("保存/上传") el_publish.click() time.sleep(0.5) sc.logger.info('点击屏幕消除软键盘') actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('点击“保存到相册”') sc.driver.find_element_by_name('保存到相册').click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“清晰 480P”') try: sc.driver.find_element_by_name("清晰 480P").click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('该视频已导出,需要确认是否重新导出') sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("重新导出").click() time.sleep(0.5) sc.driver.find_element_by_name("清晰 480P").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('开始导出') try: WebDriverWait(sc.driver, 60).until( lambda V_exprot: V_exprot.find_element_by_name('我的工作室')) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except NoSuchElementException: sc.driver.find_element_by_name("感觉如何") sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("稍后再说").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except Exception as e: sc.logger.error('导出失败', e) return False def test_export_03_second(self): """导出-保存到相册-720P.""" sc.logger.info('导出-保存到相册-720P-二次导出') fun_name = 'test_export_second' sc.logger.info('进入我的工作室') sc.driver.find_element_by_name("更多草稿").click() time.sleep(0.5) sc.logger.info('保存并上传') el_publish = sc.driver.find_element_by_name("保存/上传") el_publish.click() time.sleep(0.5) sc.logger.info('点击屏幕消除软键盘') actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('点击“保存到相册”') sc.driver.find_element_by_name('保存到相册').click() time.sleep(0.5) sc.logger.info('点击“高清 720P”') try: sc.driver.find_element_by_name("高清 720P").click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('该视频已导出,需要确认是否重新导出') sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("重新导出").click() time.sleep(0.5) sc.driver.find_element_by_name("高清 720P").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('开始导出') try: WebDriverWait(sc.driver, 60).until( lambda V_exprot: V_exprot.find_element_by_name('我的工作室')) sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except NoSuchElementException: sc.driver.find_element_by_name("感觉如何") sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("稍后再说").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except Exception as e: sc.logger.error('导出失败', e) return False def test_export_04_third(self): """导出-保存到相册-1080P.""" sc.logger.info('导出-保存到相册-1080P') fun_name = 'test_export_third' sc.logger.info('进入我的工作室') sc.driver.find_element_by_name("更多草稿").click() time.sleep(0.5) sc.logger.info('保存并上传') el_publish = sc.driver.find_element_by_name("保存/上传") el_publish.click() time.sleep(0.5) sc.logger.info('点击屏幕消除软键盘') actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('点击“保存到相册”') sc.driver.find_element_by_name('保存到相册').click() time.sleep(0.5) sc.logger.info('确认视频是否已导出') try: sc.driver.find_element_by_name("重新导出").click() time.sleep(0.5) except NoSuchElementException: sc.logger.info('该视频未导出过,直接选择要导出的尺寸') sc.logger.info('点击“超清 1080P”') try: sc.driver.find_element_by_name("超清 1080P").click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('当前设备不支持1080P导出,点击屏幕消除选项框') actions = TouchAction(sc.driver) actions.tap(None, 500, 300, 1).release().perform() sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() return True sc.logger.info('开始导出') try: WebDriverWait(sc.driver, 60).until( lambda V_exprot: V_exprot.find_element_by_name('我的工作室')) sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except NoSuchElementException: sc.driver.find_element_by_name("感觉如何") sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("稍后再说").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except Exception as e: sc.logger.error('导出失败', e) return False def test_export_05_gif(self): """导出-保存到相册-GIF.""" sc.logger.info('导出-保存到相册-GIF') fun_name = 'test_export_gif' sc.logger.info('进入我的工作室') sc.driver.find_element_by_name("更多草稿").click() time.sleep(0.5) sc.logger.info('保存并上传') el_publish = sc.driver.find_element_by_name("保存/上传") el_publish.click() time.sleep(0.5) sc.logger.info('点击屏幕消除软键盘') actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('点击“保存到相册”') sc.driver.find_element_by_name('保存到相册').click() time.sleep(0.5) sc.logger.info('确认视频是否已导出') try: sc.driver.find_element_by_name("重新导出").click() time.sleep(0.5) except NoSuchElementException: sc.logger.info('该视频未导出过,直接选择要导出的尺寸') sc.logger.info('点击“GIF”') try: sc.driver.find_element_by_name("GIF").click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('当前设备不支持GIF导出,点击屏幕消除选项框') actions = TouchAction(sc.driver) actions.tap(None, 500, 300, 1).release().perform() sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() return True sc.logger.info('选择GIF导出尺寸') sc.driver.find_element_by_xpath( "(//XCUIElementTypeImage[@name='vivavideo_gif_icon_arrow_n'])[1]" ).click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("320P").click() time.sleep(0.5) sc.logger.info('选择GIF导出帧率') sc.driver.find_element_by_xpath( "(//XCUIElementTypeImage[@name='vivavideo_gif_icon_arrow_n'])[2]" ).click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("15F/s").click() time.sleep(0.5) sc.logger.info('点击“确定”按钮') sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("确定").click() sc.logger.info('开始导出') try: WebDriverWait(sc.driver, 60).until( lambda V_exprot: V_exprot.find_element_by_name('我的工作室')) sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except NoSuchElementException: sc.driver.find_element_by_name("感觉如何") sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("稍后再说").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() except Exception as e: sc.logger.error('导出失败', e) return False def test_export_06_giveup(self): """导出-保存到相册-导出取消.""" sc.logger.info('导出-保存到相册-导出取消') fun_name = 'test_export_giveup' sc.logger.info('进入我的工作室') sc.driver.find_element_by_name("更多草稿").click() time.sleep(0.5) sc.logger.info('保存并上传') el_publish = sc.driver.find_element_by_name("保存/上传") el_publish.click() time.sleep(0.5) sc.logger.info('点击屏幕消除软键盘') actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('点击“保存到相册”') sc.driver.find_element_by_name('保存到相册').click() time.sleep(0.5) sc.logger.info('确认视频是否已导出') try: sc.driver.find_element_by_name("重新导出").click() time.sleep(0.5) except NoSuchElementException: sc.logger.info('该视频未导出过,直接选择要导出的尺寸') sc.logger.info('点击“高清 720P”') sc.driver.find_element_by_name("高清 720P").click() time.sleep(1) sc.logger.info('放弃导出') sc.driver.find_element_by_name('icon exit close n').click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("不等了").click() sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestCameraCancel(TestCase): """camera取消操作相关的测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_cancel_01_shot(self): """拍摄-拍摄页放弃.""" sc.logger.info('拍摄-拍摄页放弃') fun_name = 'test_cancel_shot' sc.logger.info('点击创作中心主按钮') ba.home_enter() sc.logger.info('点击“高清拍摄”按钮') WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_home_camera)).click() # 点拍 sc.logger.info('开始录制') el_capture = WebDriverWait(sc.driver, 10).until( lambda x: x.find_element_by_xpath(iOS_elements.el_cp_normal)) el_capture.click() sc.capture_screen(fun_name, self.img_path) time.sleep(5) sc.logger.info('录制5s后点击录制按钮停止录制') el_capture.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角取消按钮') ba.find_element_click('name', 5, iOS_elements.el_cam_close) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“丢弃”按钮') ba.find_element_click('name', 5, iOS_elements.el_discard) sc.logger.info('拍摄-拍摄页放弃测试完成') def test_cancel_02_save(self): """拍摄-拍摄页保存.""" sc.logger.info('拍摄-拍摄页保存') fun_name = 'test_cancel_save' sc.logger.info('点击“高清拍摄”按钮') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_home_camera)).click() # 点拍 sc.logger.info('录制两段5s的视频') el_capture = WebDriverWait(sc.driver, 10).until( lambda x: x.find_element_by_xpath(iOS_elements.el_cp_normal)) for i in range(2): el_capture.click() sc.capture_screen(fun_name, self.img_path) time.sleep(5) el_capture.click() sc.logger.info('撤销第二段视频') for i in range(2): sc.driver.find_element_by_name("撤销").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角取消按钮') ba.find_element_click('name', 5, iOS_elements.el_cam_close) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“保存”按钮') ba.find_element_click('name', 5, iOS_elements.el_save) sc.logger.info('拍摄-拍摄页保存测试完成')
class TestUserLogin(TestCase): """用户空间登录测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_login_01_start(self): """测试登录页面未登录时的初始状态. 1.无法获取到启动页的"跳过"控件,所以暂时先手动跳过启动页再进行登录测试,后续再优化 """ sc.logger.info('登录页面初始状态检查测试开始') fun_name = 'test_login_origin' time.sleep(5) sc.logger.info('授权小影发送通知') try: sc.driver.find_element_by_name('允许').click() except NoSuchElementException: sc.logger.info('已授权小影发送通知') sc.logger.info('关闭活动弹窗') time.sleep(2) try: sc.driver.find_element_by_name( "vivavideo purchase close n").click() except NoSuchElementException: sc.logger.info('当前无或者已关闭活动弹窗') sc.logger.info('切换到"我"') btn_me = "//*/XCUIElementTypeTabBar/XCUIElementTypeButton[3]" sc.driver.find_element_by_xpath(btn_me).click() time.sleep(.500) sc.capture_screen(fun_name, self.img_path) assert btn_me is not None @staticmethod def login_judge(): """判断是否已经登录.""" btn_login = '******' try: el_login_btn = sc.driver.find_element_by_name(btn_login) except NoSuchElementException: sc.logger.info('未找到“立即登录”按钮,用户已经成功登录') return True else: sc.logger.info('找到“立即登录”按钮,用户未登录') return el_login_btn @staticmethod def qq_login(username, password): """使用qq登录.""" sc.logger.info('跳转到QQ登录页面') sc.logger.info('点击"QQ账号"') sc.driver.find_element_by_name('QQ帐号').click() try: try: sc.driver.find_element_by_name('授权并登录').click() except NoSuchElementException: sc.driver.find_element_by_name('登录').click() sc.logger.info('QQ账号已登录,直接点击"授权并登录"') except NoSuchElementException: # 授权页面的登录有时显示"授权并登录",有时显示"登录",所以此处输入账号登录的判断需要再优化 sc.logger.info('QQ账号未登录,请输入QQ账号及密码登录') sc.logger.info('输入QQ账号') el_account = sc.driver.find_element_by_accessibility_id('帐号') el_account.click() el_account.send_keys(username) time.sleep(1) sc.logger.info() el_passwd = sc.driver.find_element_by_accessibility_id('输入QQ密码') el_passwd.click() el_passwd.send_keys(password) sc.logger.info('点击“登录”按钮') sc.driver.find_element_by_name('登录').click() sc.logger.info('检查QQ授权登录是否成功') try: WebDriverWait( sc.driver, 30).until(lambda el_settings: el_settings.find_element_by_name( "vivavideo setting p")) sc.logger.info('授权登录成功') time.sleep(2) try: sc.driver.find_element_by_name("icon dj close").click() except NoSuchElementException: sc.logger.info('非首次登录,已跳过领取特权') except Exception as e: sc.logger.info('关闭"领取特权"异常', e) except TimeoutError as t: sc.logger.info('QQ授权登录超时', t) 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': return TestUserLogin.qq_login(username, passwd) else: return False @staticmethod def test_login_qq(): """国内用户测试使用qq登录.""" sc.logger.info('登录页面QQ登录测试开始') login_res = TestUserLogin.login_judge() if login_res is True: assert True else: sc.logger.info('点击“立即登录”按钮') login_res.click() time.sleep(2) username = '******' passwd = 'qa123456' login_res = TestUserLogin.login_method('QQ', username, passwd) assert login_res is not False
class Settings(TestCase): """设置页面测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] def test_settings_01_net(self): """设置-网络设置""" fun_name = 'test_settings_net' time.sleep(5) sc.logger.info("进入设置页面") sc.driver.find_element_by_name("我").click() # 个人页 sc.driver.find_element_by_name("vivavideo setting p").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("网络设置") sc.driver.find_element_by_name("只在WIFI网络上传/下载视频").click() sc.logger.info("自动播放设置") sc.driver.find_element_by_name("自动播放设置").click() sc.driver.find_element_by_name("不自动播放").click() sc.driver.find_element_by_name("仅在wifi环境下").click() sc.driver.find_element_by_name("在wifi和移动网络环境下").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页面") sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info("接收通知推送") sc.driver.find_element_by_name("接收通知推送").click() el_push_message = sc.driver.find_elements_by_ios_predicate( "type == 'XCUIElementTypeImage'") for el in el_push_message: el.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页面") sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_settings_02_privacy(self): """设置-隐私设置""" fun_name = 'test_settings_privacy' sc.logger.info("设置私信权限") sc.driver.find_element_by_name("私信权限").click() sc.driver.find_element_by_name("所有人").click() sc.driver.find_element_by_name("我关注的人").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页面") sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info("查看黑名单") sc.driver.find_element_by_name("黑名单").click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页面") sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info("隐私账号设置") try: sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[3]/XCUIElementTypeImage").click() except NoSuchElementException: sc.logger.info("隐私账号设置已开启") sc.capture_screen(fun_name, self.img_path) def test_settings_03_feedback(self): """设置-意见反馈""" fun_name = 'test_settings_feedback' sc.logger.info("意见反馈") # width = sp.get_window_size()['width'] # heightt = sp.get_window_size()['heightt'] # sp.swipe(width / 2, heightt * 9 / 10, width / 2, heightt * 1 / 10, 500) start_x = self.width // 2 start_bottom = self.height - self.height // 10 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.8, 500) sc.logger.info("进入反馈页面") sc.driver.find_element_by_name("意见反馈").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("新建反馈") sc.driver.find_element_by_name("+ 新建反馈").click() time.sleep(2) sc.capture_screen(fun_name, self.img_path) sc.logger.info("填写问题") el_question = sc.driver.find_element_by_ios_predicate( "type == 'XCUIElementTypeTextView'") el_question.clear() el_question.send_keys("just for ios test") time.sleep(1) try: sc.driver.find_element_by_xpath( "//XCUIElementTypeButton[@name='Done']").click() except NoSuchElementException: sc.logger.info("当前键盘为中文键盘") sc.driver.find_element_by_xpath("完成").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("选择问题分类") time.sleep(1) sc.driver.find_element_by_name("vivavideo_common_pulldown_n").click() sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.2, 500) sc.driver.find_element_by_xpath( "//XCUIElementTypeButton[@name='完成']").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("提供截图") sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='icon_add_nrm']").click() time.sleep(1) sc.driver.find_element_by_name("取消").click() sc.logger.info("输入联系方式") el_contact = sc.driver.find_elements_by_ios_predicate( "type == 'XCUIElementTypeTextField'") for contact in el_contact: if contact.text == u'QQ': contact.send_keys("245603638") break for contact in el_contact: if contact.text == u'手机号': contact.send_keys("15857154810") break sc.capture_screen(fun_name, self.img_path) sc.logger.info("提交反馈") sc.driver.find_element_by_xpath( "//XCUIElementTypeButton[@name='Done']").click() sc.driver.find_element_by_xpath( "//XCUIElementTypeButton[@name='提交']").click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_settings_04_other(self): """设置-其他设置""" fun_name = 'test_settings_other' sc.logger.info("其他设置") start_x = self.width // 2 start_bottom = self.height - self.height // 10 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.8, 500) sc.logger.info('关于小影') sc.driver.find_element_by_name("关于小影").click() sc.driver.find_element_by_name( "vivavideo aboutxiaoying back n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('赏个好评') sc.driver.find_element_by_name("赏个好评,支持我们").click() time.sleep(2) sc.capture_screen(fun_name, self.img_path) try: sc.driver.find_element_by_name("以后").click() except NoSuchElementException: sc.logger.info("非正式版本,无法跳转苹果商店") sc.logger.info('成为VIP会员') sc.driver.find_element_by_name("成为VIP会员").click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("icon close n").click() sc.logger.info('恢复购买') sc.driver.find_element_by_name("恢复购买").click() sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name("取消").click() # sc.logger.info('推荐小影给好友') # sc.driver.find_element_by_name("推荐小影给好友").click() # sc.capture_screen(fun_name, self.img_path) # sc.driver.find_element_by_xpath("//XCUIElementTypeButton[@name='xiaoying sns icon small qq nor']").click() # time.sleep(2) # sc.driver.find_element_by_name("我的电脑").click() # sc.driver.find_element_by_name("发送").click() # time.sleep(2) # sc.driver.find_element_by_name("返回小影").click() sc.logger.info('清除缓存') sc.driver.find_element_by_name("清除缓存").click() sc.driver.find_element_by_name("清除缓存").click() sc.logger.info('退出设置页面') sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestEditSticker(TestCase): """动画贴纸的测试类.""" 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' time.sleep(5) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath("//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"剪辑"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.logger.info('向左滑动') el_collage = sc.driver.find_element_by_name("画中画") coord_x = el_collage.location.get('x') coord_y = el_collage.location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'left', 0.6, 800) # 从转场向左滑动 sc.logger.info('点击"动画贴纸"') sc.driver.find_element_by_name("动画贴纸").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"添加"按钮') sc.driver.find_element_by_name("vivavideo tool sticker add n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('选择一个"贴纸"添加') el_sticker = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeCollectionView[2]/*/XCUIElementTypeOther/XCUIElementTypeImage") el_sticker.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('镜像"贴纸"') sc.driver.find_element_by_accessibility_id( "XiaoYingResource.bundle/vivavideo_tool_subtitle_flip_n").click() sc.logger.info('切换"贴纸"分类') el_sticker_type = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeCollectionView[1]/*/XCUIElementTypeOther/XCUIElementTypeImage") el_sticker_type.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载该分类"贴纸"') try: sc.driver.find_element_by_name("免费下载").click() except NoSuchElementException: sc.logger.info('该分类"贴纸"已下载') sc.logger.info('点击GIF图标') sc.driver.find_element_by_name("GIF").click() time.sleep(3) sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回贴纸添加页面') sc.driver.find_element_by_name('vivavideo com nav back n').click() sc.logger.info('点击下载更多') sc.driver.find_element_by_name("xiaoying itembar down more").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回贴纸添加页面') sc.driver.find_element_by_name('vivavideo com nav back n').click() sc.logger.info('点击右上角保存') el_ok_btn = sc.driver.find_element_by_name("xiaoying com ok") for i in range(2): el_ok_btn.click() sc.capture_screen(fun_name,self.img_path) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_edit_sticker_cancel(self): """剪辑-动画贴纸-放弃.""" sc.logger.info('剪辑-动画贴纸-放弃') fun_name = 'test_edit_sticker_cancel' time.sleep(1) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"剪辑"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.logger.info('向左滑动') el_collage = sc.driver.find_element_by_name("画中画") coord_x = el_collage.location.get('x') coord_y = el_collage.location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'left', 0.6, 800) # 从转场向左滑动 sc.logger.info('点击"动画贴纸"') sc.driver.find_element_by_name("动画贴纸").click() sc.logger.info('点击"添加"按钮') sc.driver.find_element_by_name("vivavideo tool sticker add n").click() sc.logger.info('点击右上角保存') sc.driver.find_element_by_name("xiaoying com ok").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('放弃编辑') sc.driver.find_element_by_name("xiaoying com cancel").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"确认"放弃添加') sc.driver.find_element_by_name("确认").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') time.sleep(3) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestCameraMusic(TestCase): """camera音乐视频的基本测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_music_01_shot(self): """拍摄-音乐视频(3:4).""" sc.logger.info('拍摄-音乐视频(3:4)') fun_name = 'test_music_shot' sc.logger.info('点击音乐视频') ba.home_first_click('音乐视频') # 第一次从次要功能位打开音乐视频,拍摄按钮是另一个控件,所以先关闭再打开 sc.logger.info('退出拍摄') time.sleep(0.5) WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cam_close)).click() # 退回首页后,常无法再次获取到音乐视频控件,此处重启一次app sc.logger.info('重启app') sc.driver.close_app() time.sleep(1) sc.driver.launch_app() sc.logger.info('点击音乐视频') ba.home_first_click('音乐视频') sc.logger.info('切换到3:4拍摄') time.sleep(1) ba.find_element_click('name', 5, iOS_elements.el_ful) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“点击添加配乐”按钮') sc.driver.find_element_by_name("点击添加配乐").click() time.sleep(2) sc.logger.info('下拉刷新') start_x = self.width // 2 start_bottom = self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'down', 0.3, 300) sc.logger.info('下载音乐') music_list = sc.driver.find_elements_by_name( iOS_elements.el_mus_download) # music_list.pop(0) if len(music_list) >= 4: music_list = music_list[1:4] for el_music in music_list: el_music.click() time.sleep(0.5) time.sleep(10) sc.logger.info('点击一首已下载音频试听') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_mus_play)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“添加”按钮') time.sleep(5) WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_name('添加')).click() sc.capture_screen(fun_name, self.img_path) # 点拍 sc.logger.info('拍摄一段5s的视频') btn_rec = WebDriverWait(sc.driver, 10).until( lambda x: x.find_element_by_xpath(iOS_elements.el_cp_music)) ba.video_capture('点拍', btn_rec, 5) sc.logger.info('取消限制弹窗') try: WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel)).click() except TimeoutException: sc.logger.info('限制弹窗已取消') sc.logger.info('返回创作页') ba.back_to_home() sc.logger.info('拍摄-音乐视频(3:4)完成') def test_music_02_change(self): """拍摄-音乐视频-更换音乐重录.""" sc.logger.info('拍摄-音乐视频-更换音乐重录') fun_name = 'test_music_change' sc.logger.info('点击音乐视频') time.sleep(1) sc.driver.find_element_by_name('音乐视频').click() sc.logger.info('点击“点击添加配乐”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name('点击添加配乐')).click() sc.logger.info('点击一首已下载音频试听') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_mus_play)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击音乐标题') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_mus_title)).click() sc.logger.info('更换音乐重录') sc.driver.find_element_by_name("更换音乐重录").click() sc.logger.info('点击一首已下载音频试听') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_mus_play)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.capture_screen(fun_name, self.img_path) # 点拍 sc.logger.info('开始录制') el_capture = WebDriverWait(sc.driver, 10).until( lambda x: x.find_element_by_xpath(iOS_elements.el_cp_music)) el_capture.click() sc.capture_screen(fun_name, self.img_path) time.sleep(5) sc.logger.info('录制5s后点击录制按钮停止录制') el_capture.click() sc.capture_screen(fun_name, self.img_path) try: sc.logger.info('点击确认按钮') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_cam_next)).click() except TimeoutException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.capture_screen(fun_name, self.img_path) sc.logger.info('取消限制弹窗') try: WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel)).click() except TimeoutException: sc.logger.info('限制弹窗已取消') sc.logger.info('返回创作页') ba.back_to_home() sc.logger.info('拍摄-音乐视频-更换音乐重录完成') def test_music_03_redo(self): """拍摄-音乐视频-直接重录.""" sc.logger.info('拍摄-音乐视频-直接重录') fun_name = 'test_music_redo' sc.logger.info('点击音乐视频') time.sleep(1) sc.driver.find_element_by_name('音乐视频').click() sc.logger.info('点击“点击添加配乐”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name('点击添加配乐')).click() sc.logger.info('点击一首已下载音频试听') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_mus_play)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击音乐标题') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_mus_title)).click() sc.logger.info('直接重录') sc.driver.find_element_by_name("直接重录").click() # 点拍 sc.logger.info('开始录制') el_capture = WebDriverWait(sc.driver, 10).until( lambda x: x.find_element_by_xpath(iOS_elements.el_cp_music)) el_capture.click() sc.capture_screen(fun_name, self.img_path) time.sleep(5) sc.logger.info('录制5s后点击录制按钮停止录制') el_capture.click() sc.capture_screen(fun_name, self.img_path) try: sc.logger.info('点击确认按钮') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_cam_next)).click() except TimeoutException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.capture_screen(fun_name, self.img_path) sc.logger.info('取消限制弹窗') try: WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel)).click() except TimeoutException: sc.logger.info('限制弹窗已取消') sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('拍摄-音乐视频-直接重录完成')
class TestEditSound(TestCase): """配音的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_sound_01_add(self): """剪辑-配音-添加.""" sc.logger.info('剪辑-配音-添加') fun_name = 'test_edit_sound_add' time.sleep(5) sc.logger.info('点击创作中心主按钮') try: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_n']").click() except NoSuchElementException: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_f']").click() sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"剪辑"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.logger.info('向左滑动') start_x = self.width - self.width // 10 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 800) sc.logger.info('点击"配音"') try: sc.driver.find_element_by_name("配音").click() except NoSuchElementException: sc.logger.info('未找到"配音"按钮,再向左滑动') sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 800) sc.driver.find_element_by_name("配音").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击右侧预置"配音"图标') sc.driver.find_element_by_name("vivavideo tool sound list n").click() sc.logger.info('选择一个"音频"试听') el_sound_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable/*/XCUIElementTypeButton[2]") el_sound_name.click() sc.logger.info('添加') sc.driver.find_element_by_name("添加").click() def test_edit_sound_02_record(self): """剪辑-配音-录音.""" sc.logger.info('剪辑-配音-录音') fun_name = 'test_edit_sound_record' try: WebDriverWait( sc.driver, 20).until(lambda el_record: el_record.find_element_by_name( "vivavideo tool sound start n")) el_record = sc.driver.find_element_by_name( "vivavideo tool sound start n") sc.logger.info("授权小影访问麦克风") try: el_record.click() sc.driver.find_element_by_name("好").click() # 授权访问麦克风 time.sleep(1) except NoSuchElementException: sc.logger.info("已授权") sc.logger.info('长按录制10s音频') actions = TouchAction(sc.driver) actions.long_press(el_record, None, None, 10000).release().perform() sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('添加的配音音频时长超出20s,可选择时长小的音频或者修改等待时长') sc.logger.info('点击“右上角”保存') sc.driver.find_element_by_name("xiaoying com ok").click() sc.logger.info('存草稿并返回创作页首页') sc.driver.find_element_by_name("存草稿").click() time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_edit_sound_03_del(self): """剪辑-配音-删除.""" sc.logger.info('剪辑-配音-删除') fun_name = 'test_edit_sound_del' time.sleep(1) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"剪辑"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.logger.info('向左滑动') start_x = self.width - self.width // 10 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 800) sc.logger.info('点击"配音"') try: sc.driver.find_element_by_name("配音").click() except NoSuchElementException: sc.logger.info('未找到"配音"按钮,再向左滑动') sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 800) sc.driver.find_element_by_name("配音").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"播放"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar play").click() sc.logger.info('点击"编辑"按钮') try: WebDriverWait( sc.driver, 20).until(lambda el_edit: el_edit.find_element_by_name( "vivavideo tool fx edit n")) sc.logger.info('点击左侧"暂停"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar paus").click() sc.driver.find_element_by_name("vivavideo tool fx edit n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击删除按钮') sc.driver.find_element_by_name( "vivavideo tool subtitle delete").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击右上角确认按钮') sc.driver.find_element_by_name("xiaoying com ok").click() except NoSuchElementException: sc.logger.error('未找到编辑按钮,请重试') return False def test_edit_sound_04_cancel(self): """剪辑-配音-放弃.""" sc.logger.info('剪辑-配音-放弃') fun_name = 'test_edit_sound_cancel' sc.logger.info('点击"配音"') time.sleep(1) sc.driver.find_element_by_name("配音").click() sc.logger.info('点击右侧预置"配音"图标') sc.driver.find_element_by_name("vivavideo tool sound list n").click() sc.logger.info('选择一个"音频"试听') el_sound_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable/*/XCUIElementTypeButton[2]") el_sound_name.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加') sc.driver.find_element_by_name("添加").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('等待配音添加完成') try: WebDriverWait( sc.driver, 20).until(lambda el_record: el_record.find_element_by_name( "vivavideo tool sound start n")) except NoSuchElementException: sc.logger.info('添加的配音音频时长超出20s,可选择时长小的音频或者修改等待时长') sc.logger.info('点击"左上角X"放弃添加') sc.driver.find_element_by_name("xiaoying com cancel").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"确认"放弃添加') sc.driver.find_element_by_name("确认").click() sc.logger.info('点击“存草稿”按钮') time.sleep(3) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestUserLogin(TestCase): """用户登录测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_login_01_start(self): """测试登录页面未登录时的初始状态 """ sc.logger.info('登录页面初始状态检查测试开始') fun_name = 'test_login_origin' sc.logger.info('授权小影发送通知') try: WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name("允许")).click() except TimeoutException: sc.logger.info('已授权小影发送通知') sc.logger.info('执行引导操作') try: time.sleep(2) sc.driver.find_element_by_name("下一步").click() sc.driver.find_element_by_name("下一步").click() sc.driver.find_element_by_name("完成").click() except NoSuchElementException: sc.logger.info('已经执行过操作引导页面') sc.logger.info('小影圈页面-关闭活动弹窗') try: sc.driver.find_element_by_name( "vivavideo purchase close n").click() except NoSuchElementException: sc.logger.info('当前无或者已关闭活动弹窗') sc.logger.info('切换到"我"') sc.driver.find_element_by_xpath(iOS_elements.btn_me).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('小影圈页面-关闭活动弹窗') try: sc.driver.find_element_by_name( "vivavideo purchase close n").click() except NoSuchElementException: sc.logger.info('当前无或者已关闭活动弹窗') @staticmethod def login_judge(): """判断是否已经登录.""" btn_login = "******" try: el_login_btn = sc.driver.find_element_by_name(btn_login) except NoSuchElementException: sc.logger.info('未找到"注册/登录"按钮,用户已经成功登录') return True else: sc.logger.info('找到"注册/登录"按钮,用户未登录') return el_login_btn @staticmethod def qq_login(username, password): """使用qq登录.""" sc.logger.info('点击"QQ账号"') try: sc.driver.find_element_by_name("QQ帐号").click() except NoSuchElementException: sc.driver.find_element_by_name("使用此账号登录").click() try: try: WebDriverWait( sc.driver, 10).until(lambda x: x.find_element_by_name("登录")).click() except TimeoutException: sc.driver.find_element_by_name("授权并登录").click() sc.logger.info('QQ账号已登录,直接点击"授权并登录"') except NoSuchElementException: # 授权页面的登录有时显示"授权并登录",有时显示"登录",所以此处输入账号登录的判断需要再优化 sc.logger.info('QQ账号未登录,请输入QQ账号及密码登录') sc.logger.info('输入QQ账号') el_account = sc.driver.find_element_by_accessibility_id('帐号') el_account.click() el_account.send_keys(username) sc.logger.info() el_passwd = sc.driver.find_element_by_accessibility_id('输入QQ密码') el_passwd.click() el_passwd.send_keys(password) sc.logger.info('点击“登录”按钮') sc.driver.find_element_by_name('登录').click() sc.logger.info('检查QQ授权登录是否成功') try: WebDriverWait( sc.driver, 10).until(lambda el_settings: el_settings.find_element_by_name( iOS_elements.btn_settings)) sc.logger.info('授权登录成功') try: sc.driver.find_element_by_name("icon dj close").click() except NoSuchElementException: sc.logger.info('非首次登录,已跳过领取特权') except TimeoutException: sc.logger.info('QQ授权登录超时') 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': return TestUserLogin.qq_login(username, passwd) else: return False @staticmethod def test_login_02_qq(): """国内用户测试使用qq登录.""" sc.logger.info('登录页面QQ登录测试开始') login_res = TestUserLogin.login_judge() if login_res is True: assert True else: sc.logger.info('点击"注册/登录"按钮') login_res.click() username = '******' passwd = 'qa123456' login_res = TestUserLogin.login_method('QQ', username, passwd) assert login_res is not False
class TestTemplate(TestCase): """素材中心测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_template_01_theme(self): """素材中心-主题.""" sc.logger.info('素材中心-主题') fun_name = 'test_template_theme' ba.home_first_click('素材中心') sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击顶部banner') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_accessibility_id( iOS_elements.el_banner)).click() sc.logger.info('返回') try: WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_xpath( '//XCUIElementTypeButton[@name="vivavideo com nav back n"]' )).click() except TimeoutException: WebDriverWait( sc.driver, 3, 1).until(lambda el: el.find_element_by_xpath( '//XCUIElementTypeButton[@name="vivavideo back n"]') ).click() sc.logger.info('点击“主题”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('主题')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载并使用主题') ba.material_used(iOS_elements.el_store_download1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('取消限制弹窗') try: WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel)).click() except TimeoutException: sc.logger.info('限制弹窗已取消') sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('点击“主题”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('主题')).click() sc.logger.info('删除下载的主题') ba.material_manager('主题', iOS_elements.el_store_del) sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-主题测试完成') def test_template_02_filter(self): """素材中心-滤镜.""" sc.logger.info('素材中心-滤镜') fun_name = 'test_template_filter' sc.logger.info('点击“滤镜”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('滤镜')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载并使用滤镜') ba.material_used(iOS_elements.el_store_download2) sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“确认”') sc.driver.find_element_by_name(iOS_elements.el_confirm_btn).click() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('点击“滤镜”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('滤镜')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除下载的滤镜') ba.material_manager('滤镜', iOS_elements.el_store_del) sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-滤镜测试完成') def test_template_03_fx(self): """素材中心-特效.""" sc.logger.info('素材中心-特效') fun_name = 'test_template_effect' sc.logger.info('点击“特效”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('特效')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载并使用特效') ba.material_used(iOS_elements.el_store_download1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“确认”') ba.effect_add_confirm() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('点击“特效”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('特效')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除下载的特效') ba.material_manager('特效', iOS_elements.el_store_del) sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-特效测试完成') def test_template_04_font(self): """素材中心-字体.""" sc.logger.info('素材中心-字体') fun_name = 'test_template_font' sc.logger.info('点击“字体”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('字体')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载并使用字体') ba.material_used(iOS_elements.el_store_download1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“确认”') ba.effect_add_confirm() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('点击“字体”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('字体')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除下载的字体') ba.material_manager('字体', iOS_elements.el_store_del) sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-字体测试完成') def test_template_05_text(self): """素材中心-字幕.""" sc.logger.info('素材中心-字幕') fun_name = 'test_template_text' sc.logger.info('点击“字幕”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('字幕')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载并使用字幕') ba.material_used(iOS_elements.el_store_download1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“确认”') ba.effect_add_confirm() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('点击“字幕”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('字幕')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除下载的字幕') ba.material_manager('字幕', iOS_elements.el_store_del) sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-字幕测试完成') def test_template_06_sticker(self): """素材中心-动画贴纸.""" sc.logger.info('素材中心-动画贴纸') fun_name = 'test_template_sticker' ba.home_first_click('素材中心') sc.capture_screen(fun_name, self.img_path) sc.logger.info('向上滑动') el_text = sc.driver.find_element_by_name("字幕") coord_x = el_text.location.get('x') coord_y = el_text.location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'up', 0.5, 500) sc.logger.info('点击“动画贴纸”') WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('动画贴纸')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载并使用动画贴纸') ba.material_used(iOS_elements.el_store_download1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“确认”') ba.effect_add_confirm() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('向上滑动') sc.swipe_by_ratio(coord_x, coord_y, 'up', 0.5, 500) sc.logger.info('点击“动画贴纸”') WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('动画贴纸')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除下载的动画贴纸') ba.material_manager('动画贴纸', iOS_elements.el_store_del) sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-动画贴纸测试完成') def test_template_07_gif(self): """素材中心-GIF.""" sc.logger.info('素材中心-GIF') fun_name = 'test_template_gif' sc.logger.info('点击“动画贴纸”') WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('动画贴纸')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换到“GIF”') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("GIF")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载并使用GIF贴纸') ba.material_used('下载') sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“确认”') ba.effect_add_confirm() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('向上滑动') el_text = sc.driver.find_element_by_name("字幕") coord_x = el_text.location.get('x') coord_y = el_text.location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'up', 0.7, 300) sc.logger.info('点击“动画贴纸”') WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('动画贴纸')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换到“GIF”') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("GIF")).click() sc.logger.info('删除下载的GIF贴纸') ba.material_manager('GIF贴纸', '删除') sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-GIF贴纸测试完成') def test_template_08_transition(self): """素材中心-转场.""" sc.logger.info('素材中心-转场') fun_name = 'test_template_transition' start_x = self.width // 2 start_y = self.height // 8 start_bottom = self.height - start_y sc.logger.info('点击“转场”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('转场')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('向上滑动直到最底部') while True: try: sc.driver.find_element_by_name("没有更多了…").click() break except NoSuchElementException: sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) sc.logger.info('下载并使用转场') ba.material_used(iOS_elements.el_store_download1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加"视频"') ba.gallery_clip_add('视频', 2) sc.logger.info('点击下一步进入预览页') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“确认”') sc.driver.find_element_by_name(iOS_elements.el_confirm_btn).click() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作页') WebDriverWait(sc.driver, 5, 1).until(lambda el: el.find_element_by_name( iOS_elements.el_com_back)).click() WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('素材中心')).click() sc.logger.info('向上滑动') el_text = sc.driver.find_element_by_name("字幕") coord_x = el_text.location.get('x') coord_y = el_text.location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'up', 0.7, 500) sc.logger.info('点击“转场”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('转场')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除下载的转场') ba.material_manager('转场', iOS_elements.el_store_del) sc.capture_screen(fun_name, self.img_path) sc.logger.info('素材中心-动画贴纸测试完成')
class TestEditFX(TestCase): """特效的基本操作测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_edit_fx(self): """剪辑-特效-添加.""" sc.logger.info('剪辑-特效-添加') fun_name = 'test_edit_fx' sc.logger.info('点击创作中心主按钮') ba.home_enter() sc.logger.info('点击视频剪辑') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_home_edit)).click() sc.logger.info('添加视频') ba.gallery_clip_add('视频', 2) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击下一步') ba.find_element_click('predicate', 10, iOS_elements.el_gallery_next) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“效果”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name("效果")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"特效"') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name('特效')).click() sc.logger.info('下载并使用“特效”') ba.fx_add() sc.logger.info('确认添加') sc.driver.find_element_by_name(iOS_elements.el_confirm_btn).click() time.sleep(5) sc.driver.find_element_by_name(iOS_elements.el_confirm_btn).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('剪辑-特效-添加测试完成') def test_edit_fx_del(self): """剪辑-特效-删除&放弃.""" sc.logger.info('剪辑-特效-删除&放弃') fun_name = 'test_edit_fx_del' sc.logger.info('点击草稿封面') time.sleep(0.5) ba.open_draft(iOS_elements.el_studio_draft) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“效果”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name("效果")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击屏幕弹出已添加的特效编辑页面') ba.screen_tap('特效', 200, 200) sc.logger.info('删除') sc.driver.find_element_by_name('删除').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加特效并放弃') WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_name('添加')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"下载更多"') el_more = 'xiaoying itembar down more' ba.more_download(el_more) sc.logger.info('使用特效') ba.material_used(iOS_elements.el_store_download1) sc.logger.info('确定') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_confirm_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('取消添加') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel_btn)).click() sc.logger.info('确定放弃') sc.driver.find_element_by_name('确认').click() sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('剪辑-特效-删除&放弃测试完成')
class TestEditClipsAdd(TestCase): """镜头添加相关操作的测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_add_01_clips(self): """剪辑-添加镜头-相册添加.""" sc.logger.info('剪辑-添加镜头-相册添加') fun_name = 'test_edit_add_clips' time.sleep(5) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"剪辑"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.logger.info('向左滑动') start_x = self.width - self.width // 10 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 800) sc.logger.info('点击"添加镜头"') el_sound = sc.driver.find_element_by_name('配音') coord_x = el_sound.location.get('x') coord_y = el_sound.location.get('y') sc.swipe_by_ratio(coord_x, coord_y, 'left', 0.8, 800) sc.driver.find_element_by_name("添加镜头").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加视频') el_video = sc.driver.find_element_by_accessibility_id( "vivavideo_tool_gallery_audio_type_video") el_video.click() sc.driver.find_element_by_name("添加 0").click() sc.logger.info('切换到图片') sc.driver.find_element_by_name("视频").click() sc.driver.find_element_by_name("图片").click() sc.logger.info('添加图片') el_img = sc.driver.find_element_by_xpath("//*/XCUIElementTypeImage") el_img.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"下一步"') sc.driver.find_element_by_name("下一步").click() def test_edit_clips_02_shot(self): """剪辑-添加镜头-拍摄添加.""" sc.logger.info('剪辑-添加镜头-拍摄添加') fun_name = 'test_edit_clips_shot' sc.logger.info('点击"添加镜头"') time.sleep(1) sc.driver.find_element_by_name("添加镜头").click() sc.logger.info('点击右上角拍摄按钮') sc.driver.find_element_by_name( "vivavideo gallery create captu").click() time.sleep(1) sc.capture_screen(fun_name, self.img_path) sc.logger.info('开始录制') el_capture = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[3]/XCUIElementTypeOther/XCUIElementTypeOther[1]" ) el_capture.click() time.sleep(5) sc.logger.info('录制5s后点击录制按钮停止录制') el_capture.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击确认按钮') sc.driver.find_element_by_name( "vivavideo camera tool icon nex").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"下一步"') sc.driver.find_element_by_name("下一步").click() def test_edit_clips_03_cancel(self): """剪辑-添加镜头-放弃.""" sc.logger.info('剪辑-添加镜头-放弃') fun_name = 'test_edit_clips_cancel' sc.logger.info('点击"添加镜头"') time.sleep(1) sc.driver.find_element_by_name("添加镜头").click() sc.logger.info('切换到图片') sc.driver.find_element_by_name("视频").click() sc.driver.find_element_by_name("图片").click() sc.logger.info('添加图片') el_img = sc.driver.find_elements_by_xpath("//*/XCUIElementTypeImage") el_img[1].click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“左上角按钮”取消') sc.driver.find_element_by_name("vivavideo gallery back n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认取消') sc.driver.find_element_by_name("确认").click() time.sleep(3) sc.logger.info('存草稿并返回创作页首页') sc.driver.find_element_by_name("存草稿").click() time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_edit_sort(self): """剪辑-排序.""" sc.logger.info('剪辑-排序') fun_name = 'test_edit_sort' time.sleep(1) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"剪辑"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.logger.info('向左滑动') time.sleep(1) start_x = self.width - self.width // 10 start_bottom = self.height - self.height // 5 for i in range(3): sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 800) sc.logger.info('点击"排序"') sc.driver.find_element_by_name("排序").click() sc.capture_screen(fun_name, self.img_path) # #长按拖动还需要再调试 # sc.logger.info('把特效和动画贴纸位置互换') # try: # el_fx = sc.driver.find_element_by_name("特效") # el_sticker = sc.driver.find_element_by_name("动画贴纸") # actions = TouchAction(sc.driver) # actions.long_press(el_fx,1000).move_to(el_sticker).release().perform() # sc.capture_screen(fun_name, self.img_path) # except Exception as e: # sc.logger.error("排序失败",e) # return False sc.logger.info('点击"完成"保存设置') sc.driver.find_element_by_name("完成").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('存草稿并返回创作页首页') sc.driver.find_element_by_name("存草稿").click() time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestPreviewUI(TestCase): """预览页面的theme测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_preview_01_create(self): """创建草稿视频.""" sc.logger.info('创建草稿视频') fun_name = 'test_preview_create' time.sleep(5) sc.logger.info('点击创作中心主按钮') try: sc.driver.find_element_by_xpath("//XCUIElementTypeImage[@name='camerta_n']").click() except NoSuchElementException: sc.driver.find_element_by_xpath("//XCUIElementTypeImage[@name='camerta_f']").click() sc.logger.info('点击视频剪辑') sc.driver.find_element_by_name("视频剪辑").click() time.sleep(1) try: sc.driver.find_element_by_name("跳过").click() time.sleep(1) sc.driver.find_element_by_name("视频剪辑").click() except NoSuchElementException: sc.logger.info('已跳过订阅页面') sc.logger.info("授权小影访问相册和媒体资料") try: sc.driver.find_element_by_name("好").click() # 授权相册 time.sleep(2) sc.driver.find_element_by_name("好").click() # 授权媒体资料库 except NoSuchElementException: sc.logger.info("已授权") sc.logger.info('添加视频') el_video = sc.driver.find_element_by_accessibility_id("vivavideo_tool_gallery_audio_type_video") el_video.click() sc.driver.find_element_by_name("添加 0").click() sc.logger.info('添加图片') sc.driver.find_element_by_name("视频").click() sc.driver.find_element_by_name("图片").click() el_imgs = sc.driver.find_elements_by_xpath("//*/XCUIElementTypeImage") i = 1 while i < len(el_imgs): el_imgs[i].click() i = i + 1 sc.logger.info('点击下一步,进入预览页') sc.driver.find_element_by_name("下一步").click() sc.capture_screen(fun_name,self.img_path) def test_preview_02_ui(self): """预览页-UI.""" sc.logger.info('预览页-UI') fun_name = 'test_preview_create' time.sleep(1) sc.logger.info('点击“主题”按钮') sc.driver.find_element_by_name("vivavideo tool preview filter ").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“配乐”按钮') sc.driver.find_element_by_name("vivavideo tool preview music n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“剪辑”按钮') sc.driver.find_element_by_name("vivavideo tool preview edit n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“全屏”按钮') try: el_fullscreen = sc.driver.find_element_by_name("vivavideo playerview fullscree") el_fullscreen.click() sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.logger.info('点击“左上角返回”按钮退出全屏') el_fullscreen.click() except NoSuchElementException: sc.logger.info('该草稿工程为1:1视频,无全屏按钮') sc.logger.info('点击“小影水印”按钮') time.sleep(1) try: el_watermark = sc.driver.find_element_by_name("vivavideo watermark edit cn n") el_watermark.click() time.sleep(0.5) sc.capture_screen(fun_name,self.img_path) sc.driver.find_element_by_name("vivavideo popup close").click() except NoSuchElementException: sc.logger.info('会员账号已登录,水印已去除') sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“保存并上传”按钮') sc.driver.find_element_by_name("保存/上传").click() sc.capture_screen(fun_name, self.img_path) time.sleep(1) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_preview_03_time(self): """预览页-时长.""" sc.logger.info('预览页-时长') fun_name = 'test_preview_time' time.sleep(1) sc.logger.info('点击相册MV') sc.driver.find_element_by_name("相册MV").click() sc.logger.info('添加图片') el_imgs = sc.driver.find_elements_by_xpath("//*/XCUIElementTypeImage") i = 1 # 第0个为顶部的下拉框 while i < len(el_imgs): el_imgs[i].click() i = i + 1 sc.logger.info('进入预览页') sc.driver.find_element_by_name("下一步").click() sc.logger.info('点击“时长”') sc.driver.find_element_by_name("vivavideo tool preview imageti").click() sc.capture_screen(fun_name,self.img_path) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestUserFans(TestCase): """测试用户空间粉丝的测试类,分步截图.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_user_fans(self): """测试用户空间粉丝页面的初始状态.""" sc.logger.info('用户空间粉丝页面初始状态检查测试开始') fun_name = 'test_user_fans' 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_fans_follow(self): """粉丝关注/取消关注测试.""" sc.logger.info('用户空间粉丝页面关注状态测试开始') fun_name = 'test_fans_follow' btn_follow = 'com.quvideo.xiaoying:id/btn_follow_state' WebDriverWait( sc.driver, 10, 1).until(lambda el: el.find_element_by_id(btn_follow)).click() 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_fans_home(self): """点击粉丝头像进入粉丝空间测试.""" sc.logger.info('粉丝空间空间测试') fun_name = 'test_fans_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) assert avatar_img is not None def test_fans_list(self): """粉丝页面上下滑动测试.""" sc.logger.info('用户空间作品页面上下滑动测试开始') fun_name = 'test_fans_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 TestSettings(TestCase): """设置页面的测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_settings_01_ui(self): """设置:默认值UI遍.""" sc.logger.info('设置:默认UI遍历') fun_name = 'test_settings_ui' start_x = self.width // 2 start_y = self.height // 8 start_bottom = self.height - start_y sc.logger.info("进入我页面") WebDriverWait(sc.driver, 10, 1).until(lambda x: x.find_element_by_name('我')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("点击设置按钮") sc.driver.find_element_by_name(iOS_elements.btn_settings).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("已选择语言") sc.driver.find_element_by_name('已选择语言').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('选择"Enlish"') WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name('English')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("切回简体中文") WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( 'Language already selected')).click() time.sleep(0.5) sc.logger.info('向上滑动并切换回简体中文') for i in range(2): sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) sc.driver.find_element_by_name('简体中文').click() sc.logger.info("接收通知推送") WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name('接收通知推送')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下拉刷新') sc.swipe_by_ratio(start_x, start_y, 'down', 0.5, 300) checkbox_list = WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_elements_by_ios_predicate( "type == 'XCUIElementTypeImage'")) for el_checkbox in checkbox_list: el_checkbox.click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页") sc.driver.find_element_by_name(iOS_elements.el_com_back).click() sc.logger.info("隐私权限") WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( '//XCUIElementTypeStaticText[@name="私信权限"]')).click() sc.logger.info("我关注的人") WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( '//XCUIElementTypeStaticText[@name="我关注的人"]')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页") sc.driver.find_element_by_name(iOS_elements.el_com_back).click() sc.logger.info("黑名单") WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( '//XCUIElementTypeStaticText[@name="黑名单"]')).click() sc.capture_screen(fun_name, self.img_path) try: WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name('移除')).click() except TimeoutException: sc.logger.info("黑名单列表为空") sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页") sc.driver.find_element_by_name(iOS_elements.el_com_back).click() sc.logger.info("隐私账号") WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.btn_privacy)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('设置选项UI第一页遍历完成') def test_settings_02_feedback(self): """设置:意见反馈.""" sc.logger.info('设置:意见反馈') fun_name = 'test_settings_feedback' start_x = self.width // 2 start_y = self.height // 8 start_bottom = self.height - start_y sc.logger.info('向上滑动') for i in range(2): sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) sc.logger.info("意见反馈") WebDriverWait( sc.driver, 3, 1).until(lambda el: el.find_element_by_name('意见反馈')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("填写意见反馈") ba.feedback() sc.capture_screen(fun_name, self.img_path) sc.logger.info("返回设置页") sc.driver.find_element_by_name(iOS_elements.el_com_back).click() sc.logger.info('意见反馈测试完成') def test_settings_03_senior(self): """设置:高级设置和其他.""" sc.logger.info('设置:高级设置和其他') fun_name = 'test_settings_senior' start_x = self.width // 2 start_y = self.height // 8 start_bottom = self.height - start_y sc.logger.info('向上滑动') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) sc.logger.info("关于小影") WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name('关于小影')).click() sc.capture_screen(fun_name, self.img_path) about_list = sc.driver.find_elements_by_ios_predicate( iOS_elements.el_abouts) for el in about_list: el.click() sc.capture_screen(fun_name, self.img_path) try: sc.driver.find_element_by_name(iOS_elements.about_clo).click() except NoSuchElementException: WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_ad_back)).click() sc.logger.info("返回设置页") WebDriverWait(sc.driver, 3, 1).until( lambda x: x.find_element_by_name(iOS_elements.about_back)).click() sc.logger.info("成为VIP会员") WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name('成为VIP会员')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('返回设置页') WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_vip_close)).click() sc.logger.info('向上滑动') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.7, 300) sc.logger.info("清除缓存") WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name('清除缓存')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info("清除缓存") WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( '//XCUIElementTypeButton[@name="清除缓存"]')).click() sc.logger.info("退出账号") WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_name('退出当前账号')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('设置:高级设置和其他测试完成')
class TestCameraSelf(TestCase): """camera美颜趣拍的测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_camera_self(self): """拍摄-自拍视频(全屏).""" sc.logger.info('拍摄-美颜趣拍(全屏)') fun_name = 'test_camera_self' sc.logger.info('点击“美颜趣拍”') ba.home_first_click("美颜趣拍") sc.capture_screen(fun_name, self.img_path) # 第一次从次要功能位打开自拍,拍摄按钮是音乐视频的控件,所以先关闭再打开 sc.logger.info('退出拍摄') time.sleep(1) WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cam_close)).click() sc.logger.info('点击“美颜趣拍”') WebDriverWait( sc.driver, 5).until(lambda x: x.find_element_by_name('美颜趣拍')).click() sc.logger.info('点击人脸贴纸icon') ba.find_element_click('name', 10, iOS_elements.el_sticker_icon) sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载人脸贴纸') WebDriverWait(sc.driver, 5).until(lambda x: x.find_element_by_xpath( iOS_elements.el_sticker_download)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('使用下载的人脸贴纸') ba.find_element_click('xpath', 10, iOS_elements.el_sticker_used) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击屏幕消除贴纸控件') actions = TouchAction(sc.driver) actions.tap(None, 200, 200).release().perform() sc.capture_screen(fun_name, self.img_path) # 点拍 sc.logger.info('拍摄一段5s的视频') btn_rec = WebDriverWait(sc.driver, 10).until( lambda x: x.find_element_by_xpath(iOS_elements.el_cp_self)) ba.video_capture('点拍', btn_rec, 5) sc.logger.info('取消限制弹窗') try: WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel)).click() except TimeoutException: sc.logger.info('限制弹窗已取消') sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('拍摄-美颜趣拍(全屏)测试完成')
# -*- coding: utf-8 -*- from iOS import script_ultils as sc import time from selenium.common.exceptions import TimeoutException, NoSuchElementException from selenium.webdriver.support.ui import WebDriverWait from iOS import iOS_elements from appium.webdriver.common.touch_action import TouchAction import random # 获取屏幕尺寸 width, height = sc.get_size() def home_enter(): sc.logger.info('点击创作中心主按钮') try: WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_accessibility_id( iOS_elements.el_home_create)).click() except TimeoutException: sc.logger.info('当前已经是在创作页面') sc.logger.info('下拉刷新') start_x = width // 2 start_bottom = height // 2 sc.swipe_by_ratio(start_x, start_bottom, 'down', 0.3, 300) def find_element_click(method, timeout, el, duration=1): ''' 等待并点击某一控件.
class TestEditMusic(TestCase): """音乐相关操作测试测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_music_01_add(self): """剪辑-多段配乐-添加.""" sc.logger.info('剪辑-多段配乐-添加') fun_name = 'test_edit_music_add' time.sleep(5) sc.logger.info('点击创作中心主按钮') try: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_n']").click() except NoSuchElementException: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_f']").click() sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"多段配乐"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.driver.find_element_by_name("多段配乐").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('**************添加第一段配乐**************') try: sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo tool multimusic add ").click() except NoSuchElementException: sc.logger.info('当前视频位置已经添加过配乐,删除原配乐') sc.driver.find_element_by_name("vivavideo tool fx edit n").click() sc.logger.info('点击删除按钮') sc.driver.find_element_by_name( "vivavideo tool subtitle delete").click() sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo tool multimusic add ").click() sc.logger.info('点击下载按钮') el_download = sc.driver.find_element_by_name( 'vivavideo material download3 n') el_download.click() sc.capture_screen(fun_name, self.img_path) time.sleep(10) sc.logger.info('点击第一首已下载音频试听') el_music_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable//*/XCUIElementTypeButton[2]") try: el_music_name.click() except NoSuchElementException: sc.logger.error('音频下载未完成,继续等待5s') time.sleep(5) el_music_name.click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.logger.info('5s后点击屏幕"暂停"播放') time.sleep(5) actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加的片段') sc.driver.find_element_by_name( "vivavideo tool subtitle comple").click() sc.logger.info('点击左侧"播放按钮"') sc.driver.find_element_by_name( "vivavideo editor framebar play").click() sc.logger.info('5s后点击屏幕"暂停"播放') time.sleep(5) actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.capture_screen(fun_name, self.img_path) sc.logger.info('**************添加第二段配乐**************') try: sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo tool multimusic add ").click() except NoSuchElementException: sc.logger.info('当前视频位置已经添加过配乐,删除原配乐') sc.driver.find_element_by_name("vivavideo tool fx edit n").click() sc.logger.info('点击删除按钮') sc.driver.find_element_by_name( "vivavideo tool subtitle delete").click() sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo tool multimusic add ").click() sc.logger.info('点击第一首音频试听') el_music_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable//*/XCUIElementTypeButton[2]") el_music_name.click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.logger.info('3s后点击屏幕"暂停"播放') time.sleep(3) actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('确认添加的第二段配乐') sc.driver.find_element_by_name( "vivavideo tool subtitle comple").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击右上角确认按钮') sc.driver.find_element_by_name("xiaoying com ok").click() sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_edit_music_02_del(self): """剪辑-多段配乐-删除.""" sc.logger.info('剪辑-多段配乐-删除') fun_name = 'test_edit_music_del' time.sleep(1) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"多段配乐"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.driver.find_element_by_name("多段配乐").click() sc.logger.info('点击"编辑"按钮') sc.driver.find_element_by_name("vivavideo tool fx edit n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击删除按钮') sc.driver.find_element_by_name( "vivavideo tool subtitle delete").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击右上角确认按钮') sc.driver.find_element_by_name("xiaoying com ok").click() sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_edit_music_03_cancel(self): """剪辑-多段配乐-放弃.""" sc.logger.info('剪辑-多段配乐-放弃') fun_name = 'test_edit_music_cancel' time.sleep(1) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"多段配乐"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.driver.find_element_by_name("多段配乐").click() sc.logger.info('添加一段配乐') try: sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo tool multimusic add ").click() except NoSuchElementException: sc.logger.info('当前视频位置已经添加过配乐,删除原配乐') sc.driver.find_element_by_name("vivavideo tool fx edit n").click() sc.logger.info('点击删除按钮') sc.driver.find_element_by_name( "vivavideo tool subtitle delete").click() sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo tool multimusic add ").click() sc.logger.info('点击第一首音频试听') el_music_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable//*/XCUIElementTypeButton[2]") el_music_name.click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.logger.info('3s后点击屏幕"暂停"播放') time.sleep(3) actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('点击左侧"撤销"按钮') sc.driver.find_element_by_name( "vivavideo tool subtitle undo n").click() sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo tool multimusic add ").click() sc.logger.info('点击第一首音频试听') el_music_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable//*/XCUIElementTypeButton[2]") el_music_name.click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.logger.info('3s后点击屏幕"暂停"播放') time.sleep(3) actions = TouchAction(sc.driver) actions.tap(None, 500, 500, 1).release().perform() sc.logger.info('确认添加配乐') sc.driver.find_element_by_name( "vivavideo tool subtitle comple").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"左上角X"放弃添加') sc.driver.find_element_by_name("xiaoying com cancel").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"确认"放弃添加') sc.driver.find_element_by_name("确认").click() sc.logger.info('点击“存草稿”按钮') time.sleep(3) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestEditSound(TestCase): """配音的基本操作测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_edit_sound_01_rec(self): """剪辑-配音-录制.""" sc.logger.info('剪辑-配音-录制') fun_name = 'test_edit_sound_rec' sc.logger.info('打开一个草稿视频') ba.home_first_click('更多草稿') sc.logger.info('点击草稿封面') ba.open_draft(iOS_elements.el_studio_draft) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“效果”') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name("效果")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('左滑并点击"配音和音效"') el_loc = WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('画中画')) ba.swipe_left(el_loc, 0.3, 300) WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('配音和音效')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('删除已添加的配音或音效') try: WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_accessibility_id( iOS_elements.btn_rec_start)) except TimeoutException: sc.logger.info('当前位置已添加配音或音效,删除后录制') sc.driver.find_element_by_name('删除').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('"录制"一段音频') ba.sound_rec_add() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_confirm_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('剪辑-配音-录制添加测试完成') def test_edit_sound_02_audio(self): """剪辑-配音-音效.""" sc.logger.info('剪辑-配音-音效') fun_name = 'test_edit_sound_audio' WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('配音和音效')).click() sc.logger.info('删除已添加的配音或音效') try: WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_accessibility_id( iOS_elements.btn_rec_start)) except TimeoutException: sc.logger.info('当前位置已添加配音或音效,删除后录制') sc.driver.find_element_by_name('删除').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加一段音效') ba.sound_audio_add() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加') time.sleep(2) WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_confirm_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('剪辑-配音-音效添加测试完成') def test_edit_sound_03_cancel(self): """剪辑-配音-放弃.""" sc.logger.info('剪辑-配音-放弃') fun_name = 'test_edit_sound_cancel' WebDriverWait( sc.driver, 5, 1).until(lambda x: x.find_element_by_name('配音和音效')).click() sc.logger.info('删除已添加的配音或音效') try: WebDriverWait( sc.driver, 3, 1).until(lambda x: x.find_element_by_accessibility_id( iOS_elements.btn_rec_start)) except TimeoutException: sc.logger.info('当前位置已添加配音或音效,删除后录制') sc.driver.find_element_by_name('删除').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('"录制"一段音频') ba.sound_rec_add() sc.capture_screen(fun_name, self.img_path) sc.logger.info('取消添加') WebDriverWait(sc.driver, 5, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel_btn)).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('确定放弃') sc.driver.find_element_by_name('确认').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('剪辑-配音-放弃测试完成')
class TestEditCollage(TestCase): """编辑页面画中画的基本操作测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def setUpClass(cls): sc.driver.launch_app() time.sleep(3) @classmethod def tearDownClass(cls): time.sleep(3) sc.driver.close_app() def test_edit_collage_01_img(self): """剪辑-画中画-图片添加.""" sc.logger.info('剪辑-画中画-图片添加') fun_name = 'test_edit_collage_img' sc.logger.info('打开一个草稿视频') ba.home_first_click('更多草稿') sc.logger.info('点击草稿封面') ba.open_draft(iOS_elements.el_studio_draft) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“效果”') WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_name("效果")).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"画中画"') WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_name('画中画')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加图片画中画') ba.collage_add('图片') sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加') ba.effect_add_confirm() sc.logger.info('剪辑-画中画-图片添加测试完成') def test_edit_collage_02_video(self): """剪辑-画中画-视频添加.""" sc.logger.info('剪辑-画中画-视频添加') fun_name = 'test_edit_collage_video' sc.logger.info('点击"画中画"') WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_name('画中画')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加视频画中画') ba.collage_add('视频') sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加') ba.effect_add_confirm() sc.capture_screen(fun_name, self.img_path) sc.logger.info('剪辑-画中画-视频添加测试完成') def test_edit_collage_03_gif(self): """剪辑-画中画-GIF添加.""" sc.logger.info('剪辑-画中画-GIF添加') fun_name = 'test_edit_collage_gif' sc.logger.info('点击"画中画"') time.sleep(0.5) WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_name('画中画')).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('添加gif画中画') ba.collage_add('GIF') sc.capture_screen(fun_name, self.img_path) sc.logger.info('确认添加') ba.effect_add_confirm() sc.capture_screen(fun_name, self.img_path) sc.logger.info('剪辑-画中画-GIF搜索测试完成') def test_edit_collage_04_cancel(self): """剪辑-画中画-放弃.""" sc.logger.info('剪辑-画中画-放弃') fun_name = 'test_edit_collage_cancel' sc.logger.info('点击"画中画"') WebDriverWait(sc.driver, 5, 1).until( lambda x: x.find_element_by_name('画中画')).click() sc.logger.info('添加图片画中画') ba.collage_add('图片') sc.capture_screen(fun_name, self.img_path) sc.logger.info('取消添加') ba.effect_add_cancel() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') WebDriverWait(sc.driver, 5, 1).until( lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('剪辑-画中画-放弃测试完成')
class TestEditCollage(TestCase): """编辑页面画中画的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_collage_01_img(self): """剪辑-画中画-图片添加.""" sc.logger.info('剪辑-画中画-图片添加') fun_name = 'test_edit_collage_img' time.sleep(5) sc.logger.info('点击创作中心主按钮') try: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_n']").click() except NoSuchElementException: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_f']").click() sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"画中画"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.driver.find_element_by_name("画中画").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('**************添加第一张图片**************') sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo editor collage add n").click() sc.logger.info('点击"其他相册"') sc.driver.find_element_by_name("其他相册").click() sc.logger.info('返回画中画') sc.driver.find_element_by_name("vivavideo gallery back n").click() sc.logger.info('选择一个"图片"添加') el_comm = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeCollectionView[1]/*/XCUIElementTypeOther/XCUIElementTypeImage" ) el_comm.click() sc.logger.info('镜像"图片"') sc.driver.find_element_by_accessibility_id( "XiaoYingResource.bundle/vivavideo_tool_subtitle_flip_n").click() sc.logger.info('点击右上角保存') sc.driver.find_element_by_name("vivavideo editor common ok").click() sc.logger.info('点击左侧"暂停"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar paus").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击底部"确认"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar comp").click() sc.capture_screen(fun_name, self.img_path) def test_edit_collage_02_gif(self): """剪辑-画中画-gif图片添加.""" sc.logger.info('剪辑-画中画-gif图片添加') fun_name = 'test_edit_collage_gif' time.sleep(1) sc.logger.info('**************添加第二张图片**************') sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo editor collage add n").click() sc.logger.info('切换到GIF') sc.driver.find_element_by_name("GIF").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('搜索GIF图片') el_search = sc.driver.find_element_by_ios_predicate( "type == 'XCUIElementTypeTextField' AND value == '搜索Gif'") el_search.clear() el_search.send_keys('a') sc.driver.find_element_by_accessibility_id("Search").click() time.sleep(5) sc.capture_screen(fun_name, self.img_path) sc.logger.info('检查GIF图片下载是否成功') try: WebDriverWait( sc.driver, 60).until(lambda gif: gif.find_element_by_accessibility_id( "vivavideo_tool_collage_download_n")) el_gif_download = sc.driver.find_element_by_accessibility_id( "vivavideo_tool_collage_download_n") el_gif_download.click() time.sleep(10) 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('使用该下载的GIF图片') el_gif_use = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeCollectionView[2]/*/XCUIElementTypeOther/XCUIElementTypeImage" ) el_gif_use.click() time.sleep(5) sc.logger.info('镜像"GIF图片"') sc.driver.find_element_by_accessibility_id( "XiaoYingResource.bundle/vivavideo_tool_subtitle_flip_n").click() sc.logger.info('点击右上角保存') sc.driver.find_element_by_name("vivavideo editor common ok").click() sc.logger.info('点击左侧"暂停"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar paus").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击底部"确认"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar comp").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击右上角确认按钮') sc.driver.find_element_by_name("vivavideo editor common ok").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_edit_collage_03_del(self): """剪辑-画中画-删除.""" sc.logger.info('剪辑-画中画-删除') fun_name = 'test_edit_text_del' time.sleep(1) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"画中画"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.driver.find_element_by_name("画中画").click() sc.logger.info('点击已添加的"图片"') time.sleep(1) sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeButton" ).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击删除按钮') sc.driver.find_element_by_name( "vivavideo editor framebar dele").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击右上角确认按钮') sc.driver.find_element_by_name("vivavideo editor common ok").click() sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_edit_collage_04_cancel(self): """剪辑-画中画-放弃.""" sc.logger.info('剪辑-画中画-放弃') fun_name = 'test_edit_collage_cancel' time.sleep(1) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"画中画"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.driver.find_element_by_name("画中画").click() sc.logger.info('点击添加按钮') sc.driver.find_element_by_name( "vivavideo editor collage add n").click() sc.logger.info('选择一个"图片"添加') el_comm = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeCollectionView[1]/*/XCUIElementTypeOther/XCUIElementTypeImage" ) el_comm.click() sc.logger.info('点击右上角保存') sc.driver.find_element_by_name("vivavideo editor common ok").click() sc.logger.info('点击左侧"暂停"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar paus").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左侧"撤销"按钮') sc.driver.find_element_by_name( "vivavideo editor framebar undo").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('放弃编辑') sc.driver.find_element_by_name( "vivavideo editor common cancel").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"确认"放弃添加') sc.driver.find_element_by_name("确认").click() sc.logger.info('点击“存草稿”按钮') time.sleep(3) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('返回创作中心主界面') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestCreationTemplate(TestCase): """创作页面素材中心测试类. 滤镜-下载:"vivavideo material download2 n" 其他-下载:"vivavideo material download n" gif-下载:"下载" 其他-删除:"vivavideo material delete n" gif-删除:"删除" 管理:"vivavideo material Management " """ width, height = sc.get_size() img_path = sc.path_lists[0] @classmethod def template_download(cls, type, el_download): """素材下载.""" sc.logger.info('%s下载测试', type) fun_name = 'template_download' sc.logger.info('开始下载') el_template_down = sc.driver.find_element_by_name(el_download) try: sc.logger.info('点击“下载”按钮') el_template_down.click() sc.capture_screen(fun_name, cls.img_path) except NoSuchElementException: sc.logger.info('当前页面所有素材已下载完成') return True sc.logger.info('检查素材下载是否成功') try: WebDriverWait(sc.driver, 30).until( lambda theme_use: theme_use.find_element_by_name("使用")) sc.capture_screen(fun_name, cls.img_path) except TimeoutError as t: sc.logger.error('素材下载超时', t) return False except Exception as e: sc.logger.error('素材下载失败', 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' sc.logger.info('点击“使用”按钮') try: el_template_use = sc.driver.find_element_by_name("使用") el_template_use.click() except NoSuchElementException: sc.logger.error('未找到已下载的素材') return False sc.capture_screen(fun_name, cls.img_path) sc.logger.info('添加视频') time.sleep(2) el_video = sc.driver.find_element_by_accessibility_id( "vivavideo_tool_gallery_audio_type_video") el_video.click() sc.driver.find_element_by_name("添加 0").click() sc.logger.info('添加多张图片') sc.driver.find_element_by_name("视频").click() sc.driver.find_element_by_name("图片").click() el_imgs = sc.driver.find_elements_by_xpath("//*/XCUIElementTypeImage") i = 1 while i < len(el_imgs): el_imgs[i].click() i = i + 1 sc.logger.info('点击"下一步"') sc.driver.find_element_by_name("下一步").click() sc.logger.info('%s使用并进入预览页测试完成', type) @classmethod def theme_manager(cls, type, el_delete): """主题管理.""" sc.logger.info('%s删除测试', type) fun_name = 'theme_manager' sc.driver.find_element_by_name( "vivavideo material Management ").click() sc.capture_screen(fun_name, cls.img_path) el_template_del = sc.driver.find_element_by_name(el_delete) el_template_del.click() try: sc.driver.find_element_by_name("确认").click() except NoSuchElementException: sc.logger.info('%s删除不需要确认', type) sc.capture_screen(fun_name, cls.img_path) sc.logger.info('删除完成后,返回创作中心页面') el_back = sc.driver.find_element_by_name("vivavideo com nav back n") for i in range(3): time.sleep(1) el_back.click() sc.logger.info('%s删除测试完成', type) def test_template_01_theme(self): """素材中心-主题.""" sc.logger.info('进入素材中心-主题') fun_name = 'test_template_theme' start_x = self.width - self.width // 5 start_bottom = self.height // 2 time.sleep(5) sc.logger.info('点击创作中心主按钮') try: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_n']").click() except NoSuchElementException: sc.driver.find_element_by_xpath( "//XCUIElementTypeImage[@name='camerta_f']").click() sc.logger.info('点击"素材中心"') try: sc.driver.find_element_by_name("素材中心").click() sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('"素材中心"在第二页,需要向左滑动') sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.6, 500) sc.driver.find_element_by_name("素材中心").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“主题”') time.sleep(0.5) sc.driver.find_element_by_name("主题").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“主题”') btn_download = 'vivavideo material download n' self.template_download('主题', btn_download) sc.logger.info('使用“主题”') self.template_use('主题') time.sleep(2) sc.logger.info('点击“存草稿”按钮') sc.driver.find_element_by_name("存草稿").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('点击"主题"') time.sleep(0.5) sc.driver.find_element_by_name("主题").click() sc.logger.info('删除下载的主题') btn_del = 'vivavideo material delete n' self.theme_manager('主题', btn_del) def test_template_02_filter(self): """素材中心-滤镜.""" sc.logger.info('素材中心-滤镜') fun_name = 'test_template_filter' time.sleep(1) sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('点击"滤镜"') time.sleep(0.5) sc.driver.find_element_by_name("滤镜").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“滤镜”') btn_download = 'vivavideo material download2 n' self.template_download('滤镜', btn_download) sc.logger.info('使用“滤镜”') self.template_use('滤镜') time.sleep(2) sc.logger.info('保存使用的滤镜') sc.driver.find_element_by_name("xiaoying com ok").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') time.sleep(1) sc.driver.find_element_by_name("存草稿").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('点击"滤镜"') time.sleep(0.5) sc.driver.find_element_by_name("滤镜").click() sc.logger.info('删除下载的滤镜') btn_del = 'vivavideo material delete n' self.theme_manager('滤镜', btn_del) def test_template_03_effect(self): """素材中心-特效.""" sc.logger.info('素材中心-特效') fun_name = 'test_template_effect' time.sleep(1) sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('点击"特效"') time.sleep(0.5) sc.driver.find_element_by_name("特效").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“特效”') btn_download = 'vivavideo material download n' self.template_download('特效', btn_download) sc.logger.info('使用“特效”') self.template_use('特效') time.sleep(2) sc.logger.info('保存使用的特效') sc.driver.find_element_by_name("xiaoying com ok").click() time.sleep(1) sc.driver.find_element_by_name("xiaoying com ok").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') time.sleep(1) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('点击"特效"') time.sleep(0.5) sc.driver.find_element_by_name("特效").click() sc.logger.info('删除下载的特效') btn_del = 'vivavideo material delete n' self.theme_manager('特效', btn_del) def test_template_04_font(self): """素材中心-字体.""" sc.logger.info('素材中心-字体') fun_name = 'test_template_font' time.sleep(1) sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('点击"字体"') time.sleep(0.5) sc.driver.find_element_by_name("字体").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“字体”') btn_download = 'vivavideo material download n' self.template_download('字体', btn_download) sc.logger.info('使用“字体”') self.template_use('字体') time.sleep(2) sc.logger.info('确认使用该下载的字体') sc.driver.find_element_by_name("vivavideo editor common ok").click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) sc.logger.info('截取使用该字体的片段') try: WebDriverWait( sc.driver, 300).until(lambda theme_use: theme_use.find_element_by_name( "vivavideo editor common ok")) sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name( "vivavideo editor common ok").click() except TimeoutError as t: sc.logger.error('视频时长超出300s,尚未完成添加字幕,试一试使用时长较短的视频。', t) return False sc.logger.info('点击“存草稿”按钮') time.sleep(1) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('点击"字体"') time.sleep(0.5) sc.driver.find_element_by_name("字体").click() sc.logger.info('删除下载的字体') btn_del = 'vivavideo material delete n' self.theme_manager('字体', btn_del) def test_template_05_text(self): """素材中心-字幕.""" sc.logger.info('素材中心-字幕') fun_name = 'test_template_text' time.sleep(1) sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') start_x = self.width // 2 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击"字幕"') time.sleep(0.5) sc.driver.find_element_by_name("字幕").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“字幕”') btn_download = 'vivavideo material download n' self.template_download('字幕', btn_download) sc.logger.info('使用“字幕”') self.template_use('字幕') time.sleep(2) sc.logger.info('确认使用该下载的字幕') sc.driver.find_element_by_name("vivavideo editor common ok").click() time.sleep(0.5) sc.logger.info('截取使用该字体的片段') try: WebDriverWait( sc.driver, 300).until(lambda theme_use: theme_use.find_element_by_name( "vivavideo editor common ok")) sc.capture_screen(fun_name, self.img_path) sc.driver.find_element_by_name( "vivavideo editor common ok").click() except TimeoutError as t: sc.logger.error('视频时长超出300s,尚未完成添加字幕,试一试使用时长较短的视频。', t) return False sc.logger.info('点击“存草稿”按钮') time.sleep(1) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('点击"字幕"') time.sleep(0.5) sc.driver.find_element_by_name("字幕").click() sc.logger.info('删除下载的字幕') btn_del = 'vivavideo material delete n' self.theme_manager('字幕', btn_del) def test_template_06_sticker(self): """素材中心-动画贴纸.""" sc.logger.info('素材中心-动画贴纸') fun_name = 'test_template_sticker' time.sleep(1) sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') start_x = self.width // 2 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('点击"动画贴纸"') time.sleep(0.5) sc.driver.find_element_by_name("动画贴纸").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“动画贴纸”') btn_download = 'vivavideo material download n' self.template_download('动画贴纸', btn_download) sc.logger.info('使用“动画贴纸”') self.template_use('动画贴纸') time.sleep(2) sc.logger.info('确认使用该下载的贴纸') sc.driver.find_element_by_name("xiaoying com ok").click() time.sleep(0.5) sc.driver.find_element_by_name("xiaoying com ok").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') time.sleep(1) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('点击"动画贴纸"') time.sleep(0.5) sc.driver.find_element_by_name("动画贴纸").click() sc.logger.info('删除下载的贴纸') btn_del = 'vivavideo material delete n' self.theme_manager('动画贴纸', btn_del) def test_template_07_giphy(self): """GIPHY-下载.""" sc.logger.info('素材中心-GIPHY') fun_name = 'test_template_giphy' time.sleep(1) sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') start_x = self.width // 2 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('点击"动画贴纸"') time.sleep(0.5) sc.driver.find_element_by_name("动画贴纸").click() sc.logger.info('切换到"GIF"分类') sc.driver.find_element_by_name("GIF").click() time.sleep(3) sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“GIF贴纸”') btn_download = '下载' self.template_download('GIF贴纸', btn_download) sc.logger.info('使用“GIF贴纸”') self.template_use('GIF贴纸') time.sleep(2) sc.logger.info('确认使用该下载的GIF贴纸') sc.driver.find_element_by_name("xiaoying com ok").click() time.sleep(0.5) sc.driver.find_element_by_name("xiaoying com ok").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') time.sleep(1) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('点击"动画贴纸"') time.sleep(0.5) sc.driver.find_element_by_name("动画贴纸").click() sc.logger.info('切换到"GIF"分类') sc.driver.find_element_by_name("GIF").click() time.sleep(3) sc.logger.info('删除下载的GIF贴纸') btn_del = '删除' self.theme_manager('GIF贴纸', btn_del) #转场下载按钮无法定位,请先至少下载一个转场再进行相关测试 def test_template_08_transition(self): """素材中心-转场.""" sc.logger.info('素材中心-转场') fun_name = 'test_template_transition' time.sleep(1) sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') start_x = self.width // 2 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('点击"转场"') time.sleep(0.5) try: sc.driver.find_element_by_name("转场").click() except NoSuchElementException: sc.logger.info('仍需要上滑显示转场分类') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.driver.find_element_by_name("转场").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载“转场”') btn_download = 'vivavideo material download n' self.template_download('转场', btn_download) sc.logger.info('使用“转场”') self.template_use('转场') time.sleep(2) sc.logger.info('确认使用该下载的转场') sc.driver.find_element_by_name("xiaoying com ok").click() time.sleep(0.5) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“存草稿”按钮') time.sleep(1) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击"素材中心"') sc.driver.find_element_by_name("素材中心").click() sc.logger.info('向上滑动') sc.swipe_by_ratio(start_x, start_bottom, 'up', 0.6, 500) sc.logger.info('点击"转场"') time.sleep(0.5) sc.driver.find_element_by_name("转场").click() sc.logger.info('删除下载的转场') btn_del = 'vivavideo material delete n' self.theme_manager('转场', btn_del)
class TestEditTransition(TestCase): """转场的基本操作测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_edit_transition(self): """剪辑-转场.""" sc.logger.info('剪辑-转场') fun_name = 'test_edit_transition' time.sleep(5) sc.logger.info('点击首页第一个草稿封面') el_draft = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[2]/*/XCUIElementTypeButton") el_draft.click() sc.logger.info('点击"剪辑"') time.sleep(0.5) sc.driver.find_element_by_name("剪辑").click() sc.logger.info('向左滑动') start_x = self.width - self.width // 10 start_bottom = self.height - self.height // 5 sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.8, 800) sc.logger.info('点击"转场"') sc.driver.find_element_by_name("转场").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('选择一个"转场"') el_tran = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeCollectionView/XCUIElementTypeCell[3]/XCUIElementTypeOther/XCUIElementTypeImage" ) el_tran.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('切回"无转场"') time.sleep(0.5) el_empty = sc.driver.find_element_by_accessibility_id( "XiaoYingResource.bundle/vivavideo_tool_camera_none_n") el_empty.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“下载更多”按钮') time.sleep(0.5) el_more = sc.driver.find_element_by_accessibility_id( "XiaoYingResource.bundle/vivavideo_tool_camera_store_n") el_more.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“左上角”返回预览页') time.sleep(0.5) sc.driver.find_element_by_name("vivavideo com nav back n").click() sc.logger.info('点击“多选”') sc.driver.find_element_by_name("多选").click() sc.logger.info('点击“全选”') sc.driver.find_element_by_name("全选").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“随机”') sc.driver.find_element_by_name("随机").click() sc.logger.info('点击“确认”') sc.driver.find_element_by_name("确认").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“右上角”保存') sc.driver.find_element_by_name("xiaoying com ok").click() # sc.logger.info('再次点击"转场"') # sc.driver.find_element_by_name("转场").click() # sc.logger.info('切回"无转场"') # el_empty = sc.driver.find_element_by_accessibility_id( # "XiaoYingResource.bundle/vivavideo_tool_camera_none_n") # el_empty.click() # sc.capture_screen(fun_name, self.img_path) # # sc.logger.info('点击“左上角X”取消') # sc.driver.find_element_by_name("xiaoying com cancel").click() # sc.capture_screen(fun_name, self.img_path) # # sc.logger.info('确认取消') # sc.driver.find_element_by_name("确认").click() # time.sleep(3) sc.logger.info('存草稿并返回创作页首页') sc.driver.find_element_by_name("存草稿").click() time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()
class TestCameraNormal(TestCase): """camera的基本操作测试类.""" # 获取屏幕尺寸 width, height = sc.get_size() img_path = sc.path_lists[0] def setUp(self): sc.driver.launch_app() time.sleep(3) def tearDown(self): time.sleep(3) sc.driver.close_app() def test_normal_01_filter(self): """拍摄-滤镜下载.""" sc.logger.info('拍摄-滤镜下载') fun_name = 'test_normal_filter_download' sc.logger.info('点击创作中心主按钮') ba.home_enter() sc.logger.info('点击“高清拍摄”按钮') WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_home_camera)).click() sc.logger.info('点击滤镜图标') time.sleep(1) ba.find_element_click('name', 5, iOS_elements.el_filter_icon) sc.capture_screen(fun_name, self.img_path) sc.logger.info('下载滤镜') try: sc.logger.info('点击下载按钮') sc.driver.find_element_by_xpath( iOS_elements.el_filter_download).click() sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('当前页面已无未下载滤镜') sc.logger.info('下载更多') try: time.sleep(0.5) sc.driver.find_element_by_name(iOS_elements.el_filter_more).click() sc.capture_screen(fun_name, self.img_path) except NoSuchElementException: sc.logger.info('当前页面是vip订阅页面') sc.driver.find_element_by_name(iOS_elements.el_vip_close).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('重新点击下载更多') sc.driver.find_element_by_name(iOS_elements.el_filter_more).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('退出更多页面') ba.find_element_click('xpath', 10, iOS_elements.el_studio_back) sc.capture_screen(fun_name, self.img_path) sc.logger.info('退出拍摄') ba.find_element_click('name', 5, iOS_elements.el_cam_close) sc.logger.info('拍摄-滤镜下载测试完成') def test_normal_02_settings(self): """拍摄-设置相关.""" sc.logger.info('拍摄-设置相关') fun_name = 'test_camera_normal_settings' sc.logger.info('点击“高清拍摄”按钮') WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_home_camera)).click() sc.logger.info('点击设置按钮') time.sleep(1) sc.driver.find_element_by_name(iOS_elements.el_cam_setting).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('闪光灯-开') try: ba.find_element_click('name', 5, iOS_elements.el_cam_flash) sc.capture_screen(fun_name, self.img_path) except TimeoutException: sc.logger.info('当前为前置拍摄,无闪光灯选项') sc.logger.info('网格显示') ba.find_element_click('name', 5, iOS_elements.el_cam_grid) sc.capture_screen(fun_name, self.img_path) sc.logger.info('倒计时') for i in range(4): ba.find_element_click('name', 5, iOS_elements.el_cam_time) sc.capture_screen(fun_name, self.img_path) sc.logger.info('退出设置选项') ba.find_element_click('name', 5, iOS_elements.el_cam_setting) sc.logger.info('前后置切换') ba.find_element_click('name', 5, iOS_elements.el_cam_switch) sc.capture_screen(fun_name, self.img_path) sc.logger.info('视频尺寸,全屏切换到3:4') ba.find_element_click('name', 5, iOS_elements.el_ful) sc.capture_screen(fun_name, self.img_path) sc.logger.info('视频尺寸,3:4切换到1:1') ba.find_element_click('name', 5, iOS_elements.el_fou) sc.capture_screen(fun_name, self.img_path) sc.logger.info('视频尺寸,1:1切换到全屏') ba.find_element_click('name', 5, iOS_elements.el_one) sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换拍摄模式:高清相机->自拍美颜') el_self = "自拍美颜" el_normal = "高清相机" el_music = "音乐视频" ba.find_element_click('name', 5, el_self) sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换拍摄模式:自拍美颜->高清相机') ba.find_element_click('name', 5, el_normal) sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换拍摄模式:高清相机->音乐视频') ba.find_element_click('name', 5, el_music) sc.capture_screen(fun_name, self.img_path) sc.logger.info('退出拍摄') ba.find_element_click('name', 5, iOS_elements.el_cam_close) sc.logger.info('拍摄-设置相关测试完成') def test_normal_03_shot(self): """拍摄-高清相机(前置1:1).""" sc.logger.info('拍摄-高清相机(前置1:1)') fun_name = 'test_camera_normal_shot' sc.logger.info('点击“高清拍摄”按钮') WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_xpath( iOS_elements.el_home_camera)).click() sc.logger.info('切换到前置') time.sleep(1) sc.driver.find_element_by_name(iOS_elements.el_cam_switch).click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('切换到1:1') ba.find_element_click('name', 5, iOS_elements.el_ful) ba.find_element_click('name', 5, iOS_elements.el_fou) sc.capture_screen(fun_name, self.img_path) # 点拍 sc.logger.info('拍摄一段5s的视频') btn_rec = WebDriverWait(sc.driver, 10).until( lambda x: x.find_element_by_xpath(iOS_elements.el_cp_normal)) ba.video_capture('点拍', btn_rec, 5) sc.logger.info('取消限制弹窗') try: WebDriverWait(sc.driver, 3, 1).until(lambda x: x.find_element_by_name( iOS_elements.el_cancel)).click() except TimeoutException: sc.logger.info('限制弹窗已取消') sc.logger.info('点击“存草稿”按钮') WebDriverWait( sc.driver, 5, 1).until(lambda el: el.find_element_by_name("存草稿")).click() sc.logger.info('拍摄-高清相机拍摄完成')
class TestCameraMusic(TestCase): """camera音乐视频的基本测试类.""" width, height = sc.get_size() img_path = sc.path_lists[0] def test_music_01_shot(self): """拍摄-音乐视频(3:4).""" fun_name = 'test_music_shot' time.sleep(5) sc.logger.info('点击创作中心主按钮') try: sc.driver.find_element_by_accessibility_id("camerta_n").click() except NoSuchElementException: sc.driver.find_element_by_accessibility_id("camerta_f").click() sc.logger.info('向左滑动') start_x = self.width - self.width // 5 start_bottom = self.height // 2 sc.swipe_by_ratio(start_x, start_bottom, 'left', 0.6, 500) sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击音乐视频') sc.driver.find_element_by_name("音乐视频").click() sc.logger.info('跳过订阅页面') try: sc.driver.find_element_by_name("跳过").click() time.sleep(1) sc.driver.find_element_by_name("音乐视频").click() except NoSuchElementException: sc.logger.info('已跳过订阅页面') sc.logger.info("授权小影访问相机和麦克风") try: sc.driver.find_element_by_name("好").click() # 授权访问相机 time.sleep(1) sc.driver.find_element_by_name("好").click() # 授权访问麦克风 time.sleep(1) except NoSuchElementException: sc.logger.info("已授权") sc.logger.info('切换到3:4拍摄') time.sleep(1) el_ful = sc.driver.find_element_by_name( "vivavideo camera tool icon ful") el_ful.click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“点击添加配乐”按钮') sc.driver.find_element_by_name("点击添加配乐").click() time.sleep(2) sc.logger.info('点击下载按钮') el_download = sc.driver.find_element_by_name( 'vivavideo material download3 n') el_download.click() sc.capture_screen(fun_name, self.img_path) time.sleep(10) sc.logger.info('点击第一首已下载音频试听') el_music_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable//*/XCUIElementTypeButton[2]") try: el_music_name.click() except NoSuchElementException: sc.logger.error('音频下载未完成,继续等待5s') time.sleep(5) el_music_name.click() sc.logger.info('点击播放/暂停按钮') sc.driver.find_element_by_name("vivavideo tool camera pause n").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.logger.info('开始录制') # 点拍5s el_capture = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[5]/XCUIElementTypeOther/XCUIElementTypeOther[1]" ) el_capture.click() time.sleep(5) sc.logger.info('拍摄5s后点击录制按钮停止拍摄') el_capture.click() sc.logger.info('录制完成,进入预览页') try: sc.logger.info('点击确认按钮') sc.driver.find_element_by_name( "vivavideo camera tool icon nex").click() except NoSuchElementException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.logger.info('点击“存草稿”按钮') time.sleep(0.5) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click() def test_music_02_change(self): """拍摄-音乐视频-更换音乐重录.""" sc.logger.info('拍摄-音乐视频-更换音乐重录') fun_name = 'test_music_change' sc.logger.info('点击音乐视频') sc.driver.find_element_by_name("音乐视频").click() time.sleep(1) sc.logger.info('点击“点击添加配乐”按钮') sc.driver.find_element_by_name("点击添加配乐").click() time.sleep(1) sc.logger.info('点击第一首已下载音频试听') el_music_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable//*/XCUIElementTypeButton[2]") el_music_name.click() sc.logger.info('点击播放/暂停按钮') sc.driver.find_element_by_name("vivavideo tool camera pause n").click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('开始录制') # 点拍5s el_capture = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[5]/XCUIElementTypeOther/XCUIElementTypeOther[1]" ) el_capture.click() time.sleep(5) sc.logger.info('拍摄5s后点击录制按钮停止拍摄') el_capture.click() sc.logger.info('录制完成,进入预览页') try: sc.logger.info('点击确认按钮') sc.driver.find_element_by_name( "vivavideo camera tool icon nex").click() except NoSuchElementException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.logger.info('点击左上角返回按钮') sc.driver.find_element_by_name("xiaoying com back").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('点击音乐标题') time.sleep(1) sc.driver.find_element_by_accessibility_id( "vivavideo_camera_tool_icon_music_nrm").click() sc.capture_screen(fun_name, self.img_path) sc.logger.info('更换音乐重录') sc.driver.find_element_by_name("更换音乐重录").click() sc.logger.info('点击音乐名') time.sleep(1) el_music_name = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeTable//*/XCUIElementTypeButton[2]") el_music_name.click() sc.logger.info('点击播放/暂停按钮') sc.driver.find_element_by_name("vivavideo tool camera pause n").click() sc.logger.info('点击“添加”按钮') sc.driver.find_element_by_name('添加').click() sc.logger.info('开始录制') # 点拍5s el_capture = sc.driver.find_element_by_xpath( "//*/XCUIElementTypeOther[5]/XCUIElementTypeOther/XCUIElementTypeOther[1]" ) el_capture.click() time.sleep(5) sc.logger.info('拍摄5s后点击录制按钮停止拍摄') el_capture.click() sc.logger.info('录制完成,进入预览页') try: sc.logger.info('点击确认按钮') sc.driver.find_element_by_name( "vivavideo camera tool icon nex").click() except NoSuchElementException: sc.logger.info('音乐时长较短,已自动跳转预览页') sc.logger.info('点击“存草稿”按钮') time.sleep(0.5) sc.driver.find_element_by_name("存草稿").click() sc.logger.info('点击左上角返回按钮退回创作中心') time.sleep(1) sc.driver.find_element_by_name("vivavideo com nav back n").click()