def login(self, xpath): common.delayed_get_element(self.driver, 5, ("xpath", xpath)).click() common.delayed_get_element(self.driver, 3, ("id", "dopool.player:id/phoneEdit")).send_keys(telephone) timeStamp = int(time.mktime(datetime.now().timetuple())) self.driver.find_element_by_id("dopool.player:id/smsCodeEdit").send_keys(self.encrypt_md5(timeStamp)) while common.isElementExist("id", self.driver, "dopool.player:id/loginBtn"): self.driver.find_element_by_id("dopool.player:id/loginBtn").click()
def test_13_exit_play(self): """退出播放""" base(self.driver).sign_out() homepage(self.driver).stream_CCTV1() common.delayed_get_element(self.driver, 17, ("id", "dopool.player:id/backImage")).click() page_name = common.delayed_get_element(self.driver, 3, ("id", "dopool.player:id/common_page_title")).text self.assertEqual("央视", page_name, "从直播页面返回的上级页面应该是央视页")
def test_04_dailycheckin_after_checkin(self): """点击后:本期已连续签到1天,第一天:已领取,已签到按钮灰显;查看金币金额:累加5金币;签到显示已签到1天""" base.login( "//android.widget.ImageView[@resource-id='dopool.player:id/img_user_head']" ) gold_coins_number = int(checkin_page.View_gold_coins_number()) driver.find_element_by_xpath("//*[@text='签到']").click() common.delayed_get_element( driver, 3, ("id", "dopool.player:id/btn_sign")).click() #点击立即签到 checkin_days = common.delayed_get_element( driver, 3, ("id", "dopool.player:id/tv_sign_days")).text self.assertEqual("本期已连续签到1天", checkin_days, "点击签到之后,每日签到页面应显示本期已连续签到1天") first_day_xpath = "//android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android." \ "widget.LinearLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget." \ "LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.TextView[1]" first_day = driver.find_element_by_xpath(first_day_xpath).text self.assertEqual("已领取", first_day, "点击签到之前,每日签到第一天应显示已领取") checkin_sign_xpath = "//android.widget.Button[@resource-id='dopool.player:id/btn_sign']" checkin_sign = driver.find_element_by_xpath(checkin_sign_xpath).text self.assertEqual("已签到", checkin_sign, "点击签到之前,签到按钮应显示立即签到") driver.find_element_by_xpath( "//android.widget.ImageView[@resource-id='dopool.player:id/img_close']" ).click() checkin_after_gold_coins_number = int( checkin_page.View_gold_coins_number()) self.assertEqual(gold_coins_number + 5, checkin_after_gold_coins_number, "第一天签到之后,金币数量应累加5个") chenkin_sign = driver.find_element_by_xpath( "//android.widget.TextView[@resource-id='dopool.player:id/signTv']" ).text self.assertEqual("已签到1天", chenkin_sign, "签到后签到按钮下应显示:已签到1天")
def test_07_Setting(self): """ 在我的页面,设置 """ common.swipeUp(self.driver) common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@text='设置']")).click() setting_element = common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@text='给手机电视加油']")).text self.assertEqual(setting_element, "给手机电视加油", "设置页面未刷新出来")
def test_02_switching_clarity(self): """ 在我的页面,查看观看历史 """ common.delayed_get_element(self.driver, 5, ("xpath", "//*[@text='查看更多']")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/imageView")).click() base(self.driver).click_play_float_button("backImage", [(53, 91)]) self.assertTrue(common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/imageView")), "观看历史中无已播放过的视频")
def switch_home_tabs(self, tab): """在首页推荐页面,点击顶部tabs列表按钮,在列表中点击要切换的tab,等待页面刷新完成后,点击顶部tabs列表按钮,循环以上操作""" base(self.driver).switch_home_tab(tab) common.delayed_get_element(self.driver, 60, ("id", "dopool.player:id/image")) page_elements = self.driver.find_elements_by_class_name( "android.widget.ImageView") self.assertTrue(len(page_elements) > 1, f"首页-{tab}页面的元素未刷新出来")
def test_04_my_appointment(self): """ 在我的页面,查看我的预约 """ common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@text='我的预约']")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/tv_epg_name")).click() base(self.driver).click_play_float_button("backImage", [(53, 91)]) switch_stream_element = common.delayed_get_element(self.driver, 10,("id", "dopool.player:id/tv_switch_channel")).text self.assertEqual(switch_stream_element, "切换频道 >", "预约页面未刷新出来")
def test_12_watch_history(self): """直播的观看历史""" homepage(self.driver).clear_watch_history("直播") live_title = "CCTV1" homepage(self.driver).stream_CCTV1(live_title) common.delayed_get_element(self.driver, 3, ("id", "dopool.player:id/backImage")).click() common.delayed_get_element(self.driver, 3, ("id", "dopool.player:id/common_page_finish")).click() base(self.driver).bottom_navigation("我的") self.assertTrue(common.isElementExist("xpath", self.driver, f"//*[@text='{live_title}']"), f"观看历史中应显示{live_title}")
def test_06_common_problem(self): """ 在我的页面,常见问题 """ common.swipeUp(self.driver) common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@text='意见反馈']")).click() common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@text='常见问题']")).click() normal_question_element = common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@text='我在使用手机电视软件,会收取其他费用吗?']")).text self.assertEqual(normal_question_element, "我在使用手机电视软件,会收取其他费用吗?", "常见问题页面未刷新出来")
def list_message(self, driver, message): # 已经发送的消息 try: common.delayed_get_element(driver, 5, ("xpath", f"//*[@text='{message}']")) return True except: logger.error('未定位到元素:' + '%s' % ()) self.screenshot() return False
def switch_stream_tabs(self, tab): """在直播页面,点击顶部tabs列表按钮,在列表中点击要切换的tab,等待页面刷新完成后,点击顶部tabs列表按钮,循环以上操作""" if tab == "CIBN": time.sleep(2) #CIBN页签不加延时过不去 if tab == "国际": common.swipeLeft(self.driver) common.delayed_get_element(self.driver, 3, ("xpath", f"//*[@text='{tab}']")).click() common.delayed_get_element(self.driver, 60, ("id", "dopool.player:id/image")) page_elements = self.driver.find_elements_by_class_name( "android.widget.ImageView") self.assertTrue(len(page_elements) > 1, f"直播-{tab}页面的元素未刷新出来")
def test_04_change_station_vertical_screen(self): """竖屏换台""" homepage(self.driver).stream_CCTV1() common.delayed_get_element(self.driver, 15, ("xpath", "//*[@text='换台']")).click() self.driver.find_element_by_xpath("//*[@text='CIBN']").click() self.driver.find_element_by_xpath("//*[@resource-id='dopool.player:id/recyclerView']/android.view.View[1]").click() start_time = common.delayed_get_element(self.driver, 15, ("id", "dopool.player:id/portrait_current_duration")).text self.assertEqual("分", start_time[-1:], "启播时间显示**时**分即播放正常") self.driver.find_element_by_id("dopool.player:id/backImage").click() # 返回 self.driver.find_element_by_id("dopool.player:id/common_page_finish").click() # 返回首页 base(self.driver).bottom_navigation("首页")
def bottom_navigation(self, button_name): xpath_mine = "//android.widget.LinearLayout[@resource-id='dopool.player:id/bottomNavigationView']/android." \ "widget.FrameLayout[5]/android.widget.FrameLayout[1]/android.widget.ImageView[1]" # button_index = {} if common.isElementExist("xpath", self.driver, xpath_mine): button_index = {"首页": 1,"直播": 2,"热点": 3,"会员": 4,"我的": 5} else: button_index = {"首页": 1, "直播": 2, "会员": 3, "我的": 4} xpath = f"//android.widget.LinearLayout[@resource-id='dopool.player:id/bottomNavigationView']/android.widget." \ f"FrameLayout[{button_index[button_name]}]/android.widget.FrameLayout[1]/android.widget.ImageView[1]" common.delayed_get_element(self.driver, 10, ("xpath", xpath)).click()
def test_03_full_screen(self): """播放视频,全屏""" homepage(self.driver).stream_CCTV1() self.driver.find_element_by_id("dopool.player:id/iv_full_screen").click() common.delayed_get_element(self.driver, 10, ("id", "dopool.player:id/iv_full_screen")) # 点击屏幕中心 time_text = self.driver.find_element_by_id("dopool.player:id/tv_time").text self.assertEqual("分", time_text[-1:], "启播时间显示**时**分即正常播放") self.driver.find_element_by_id("dopool.player:id/backImage").click() #退出全屏 self.driver.find_element_by_id("dopool.player:id/backImage").click() #退出播放 self.driver.find_element_by_id("dopool.player:id/common_page_finish").click() # 返回首页 base(self.driver).bottom_navigation("首页")
def test_09_watch_history(self): """点播的观看历史""" homepage(self.driver).clear_watch_history("点播") homepage(self.driver).play_video(video_title) common.delayed_get_element( self.driver, 3, ("id", "dopool.player:id/backImage")).click() common.delayed_get_element( self.driver, 3, ("id", "dopool.player:id/cancel_text")).click() base(self.driver).bottom_navigation("我的") self.assertTrue( common.isElementExist("xpath", self.driver, f"//*[@text='{video_title}']"), f"观看历史中应显示{video_title}")
def test_02_upgrade(self): """点击立即升级,等待更新完毕,等待安装完毕,打开,进入首页""" base(self.driver).slide_guide_page() base(self.driver).enter_app() base(self.driver).close_privacy() common.delayed_get_element( self.driver, 6, ("id", "dopool.player:id/tv_update_now")).click() base(self.driver).permission_prompt() base(self.driver).enter_app() base(self.driver).close_privacy() base(self.driver).close_float() home_text = self.driver.find_element_by_id( "dopool.player:id/tabText").text self.assertEqual("首页", home_text, "打开app后,默认定位在首页")
def test_10_exit_play(self): """退出播放""" base(self.driver).sign_out() homepage(self.driver).play_video(video_title) common.delayed_get_element( self.driver, 17, ("id", "dopool.player:id/backImage")).click() common.delayed_get_element( self.driver, 3, ("id", "dopool.player:id/btn_left")).click() time.sleep(1) self.assertTrue( common.isElementExist("xpath", self.driver, "//*[@text='点播']"), "退出点播后应显示搜索页面") # if __name__ == "__main__": # Video().test_04_switching_clarity()
def switch_home_icon(self, index, icon): # def test_switch_home_icon(self, icon = "CRI"): """在首页推荐页面,切换的icon图标组的按钮,等待页面刷新完成""" icon_xpath = f"//android.support.v7.widget.RecyclerView[@resource-id='dopool.player:id/common_rcy']/android." \ f"widget.LinearLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.LinearLayout[{index+1}]" # 等待推荐页面的icon按钮刷新出来 common.delayed_get_element(self.driver, 60, ("xpath", icon_xpath)).click() common.delayed_get_element(self.driver, 60, ("id", "dopool.player:id/title_head")) # android.widget.FrameLayout:页面中模块的类名,页面一般会有多个这样的模块 page_elements = self.driver.find_elements_by_class_name( "android.widget.ImageView") self.driver.find_element_by_id( "dopool.player:id/common_page_finish").click() self.assertTrue(len(page_elements) > 1, f"首页-推荐页面的icon组-{icon}页面未刷新出来")
def unlogin_set(self, driver): # 未登录首次进入意见反馈页面 unlogin_xpath = "//*[@text='填写意见反馈需要您先登录并且绑定手机号哦~'']" unlogin_toast_element = common.delayed_get_element( driver, 5, ("xpath", unlogin_xpath)) self.assertEqual("填写意见反馈需要您先登录并且绑定手机号哦~", unlogin_toast_element.text, msg="未进入已经反馈页面")
def test_02_try_watch(self): """ 点击会员视频,试看 """ base(self.driver).watch_vip_video() video_element = common.delayed_get_element( self.driver, 5, ("id", "dopool.player:id/tv_hd_buy_memberships")).text self.assertEqual(video_element, "购买VIP会员", "购买VIP会员按钮未出现,VIP视频试看异常。")
def play_collect_appoint_stream(self): # 播放直播节目 self.bottom_navigation("直播") common.delayed_get_element(self.driver, 5, ("xpath", "//*[@resource-id='dopool.player:id/common_rcy']/android.widget.LinearLayout[2]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/iv_collection")).click() common.delayed_get_element(self.driver, 5, ("xpath","//*[@resource-id='dopool.player:id/epgListRV']/android.view.ViewGroup[4]/android.widget.TextView[3]")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/backImage")).click()
def test_08_collection(self): """收藏点播视频""" homepage(self.driver).play_video(video_title) common.delayed_get_element( self.driver, 3, ("id", "dopool.player:id/collection_text")).click() common.delayed_get_element( self.driver, 3, ("id", "dopool.player:id/backImage")).click() common.delayed_get_element( self.driver, 3, ("id", "dopool.player:id/cancel_text")).click() base(self.driver).bottom_navigation("我的") common.delayed_get_element(self.driver, 3, ("xpath", "//*[@text='我的收藏']")).click() common.delayed_get_element(self.driver, 3, ("xpath", "//*[@text='点播']")).click() self.assertEqual( video_title, self.driver.find_element_by_id("dopool.player:id/tvTitle").text, f"我的收藏点播列表应该是{video_title}")
def test_03_my_collection(self): """ 在我的页面,查看我的收藏 """ common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@resource-id='dopool.player:id/text'and@text='我的收藏']")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/imageView")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/backImage")).click() collection_element = common.delayed_get_element(self.driver, 10,("xpath", "//android.widget.TextView[@text='直播']")).text self.assertEqual(collection_element, "直播", "未正常返回我的收藏页面")
def clear_watch_history(self, page): base(self.driver).bottom_navigation("我的") common.delayed_get_element(self.driver, 3, ("xpath", "//*[@text='查看更多']")).click() common.delayed_get_element(self.driver, 3, ("xpath", f"//*[@text='{page}']")).click() self.driver.find_element_by_id( "dopool.player:id/managerTextView").click() common.delayed_get_element(self.driver, 3, ("xpath", "//*[@text='全选']")).click() common.delayed_get_element(self.driver, 3, ("xpath", "//*[@text='删除']")).click() self.driver.find_element_by_id("dopool.player:id/backImage").click()
def test_03_recommend(self): """猜你喜欢""" homepage(self.driver).play_video(video_title) #猜你喜欢第一个标题的xpath title_xpath = "//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android." \ "widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.view." \ "ViewGroup[1]/android.support.v4.view.ViewPager[1]/android.support.v7.widget.RecyclerView[1]/android." \ "view.ViewGroup[4]/android.widget.TextView[1]" recommend_title = common.delayed_get_element( self.driver, 10, ("xpath", title_xpath)).text # 猜你喜欢第一个视频图片的xpath xpath = "//android.support.v7.widget.RecyclerView[@resource-id='dopool.player:id/recyclerView']/android.view." \ "ViewGroup[4]/android.widget.ImageView[1]" self.driver.find_element_by_xpath(xpath).click() common.click_screen_point(self.driver, 1 / 2, 1 / 8, 20) real_title = common.delayed_get_element( self.driver, 10, ("xpath", "//*[@resource-id='dopool.player:id/tv_title']")).text self.assertTrue(recommend_title in real_title, f"猜你喜欢列表播放的视频应该是{recommend_title}")
def test_05_my_appointment(self): """ 在我的页面,意见反馈 """ common.swipeUp(self.driver) common.delayed_get_element(self.driver, 5, ("xpath", "//android.widget.TextView[@text='意见反馈']")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/sug_edt_content")).send_keys("你好,还不错。") common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/sug_tv_send")).click() appointment_element = common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/item_tv_user")).text self.assertEqual(appointment_element, "你好,还不错。", "意见反馈留言失败~")
def play_video(self, video_title, is_full_screen=False): time.sleep(7) if not self.driver.find_element_by_id( "dopool.player:id/tabText").text == "首页": base(self.driver).bottom_navigation("首页") common.delayed_get_element(self.driver, 10, ("id", "dopool.player:id/tv_tip")).click() common.delayed_get_element( self.driver, 10, ("id", "dopool.player:id/search_edit")).send_keys(video_title) video_title_xpath = "//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout" \ "[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.view.ViewGroup[1]/android." \ "widget.FrameLayout[2]/android.widget.FrameLayout[1]/android.support.v7.widget.RecyclerView[1]/android." \ "widget.TextView[1]" common.delayed_get_element(self.driver, 3, ("xpath", video_title_xpath)).click() common.delayed_get_element( self.driver, 3, ("id", "dopool.player:id/tv_watch")).click() if is_full_screen: common.delayed_get_element( self.driver, 10, ("id", "dopool.player:id/iv_full_screen")).click()
def test_05_change_station_horizontal_screen(self): """横屏换台""" homepage(self.driver).stream_CCTV1() common.delayed_get_element(self.driver, 5, ("xpath", "//*[@text='换台']")).click() common.delayed_get_element(self.driver, 3, ("xpath", "//*[@text='央视']")).click() common.delayed_get_element(self.driver, 3, ("xpath", "//*[@text='CCTV3']")).click() time.sleep(7) start_time = self.driver.find_element_by_id("dopool.player:id/portrait_current_duration").text self.assertEqual("分", start_time[-1:], "启播时间显示**时**分即播放正常")
def test_03_buy_pay_vip(self): """ 购买VIP会员 - 支付 """ base(self.driver).watch_vip_video() common.delayed_get_element( self.driver, 5, ("id", "dopool.player:id/tv_hd_buy_memberships")).click() common.delayed_get_element(self.driver, 5, ("id", "dopool.player:id/btn_pay")).click() common.delayed_get_element( self.driver, 5, ("id", "dopool.player:id/backImage")).click() open_vip_element = common.delayed_get_element( self.driver, 5, ("id", "dopool.player:id/tv_vip_protocal")).text self.assertEqual(open_vip_element, "《会员服务协议》", "未正常返回到开通VIP页面")
def test_11_one_click_live(self): """一键直播""" #1.查看直播中的节目名称 2.回看 3.一键直播 4.查看是否在播放直播中的节目 homepage(self.driver).stream_CCTV1() living_title = common.delayed_get_element(self.driver, 3, ("id", "dopool.player:id/live_title")).text common.swipeDown(self.driver, 1/2) self.driver.find_element_by_xpath("//*[@resource-id='dopool.player:id/epgListRV']/android.view.ViewGroup[1]/android.widget.TextView[3]").click() common.delayed_get_element(self.driver, 10, ("id", "dopool.player:id/iv_full_screen")) base(self.driver).click_play_float_button("civ_to_live", [(87, 388)]) common.delayed_get_element(self.driver, 10, ("id", "dopool.player:id/iv_full_screen")) actual_living_title = common.delayed_get_element(self.driver, 3, ("id", "dopool.player:id/live_title")).text self.assertEqual(living_title, actual_living_title, f"一键直播播放的节目应该是{living_title}")