def music_play_page_progress_bar_pause_displayed(self): """暂停时进度条的拖动显示""" flag = 0 log_utils.C_STEP('开始测试暂停进度条拖动及显示') home_music_recommend_page.click_today_recommend_button(self) if self.wait_element_by_mode(base_data.wait_time_mid,By.ID,today_commend_page.today_commend_page_play_all_button_id,'进入今日推荐页')== 1: flag = 1 if not flag == 1: today_commend_page.click_today_commend_page_play_all_button(self) if self.wait_element_by_mode(base_data.wait_time_mid,By.ID,music_play_page.music_play_page_album_pic_id,'进入歌曲播放页') == 1: flag = 2 if not flag == 2: first_time = music_play_page.get_current_play_time(self) log_utils.C_INFO('当前播放时长为:'+first_time) self.my_sleep(3) music_play_page.click_music_play_page_play_pause_button(self,'暂停按钮') self.my_sleep(2) log_utils.C_STEP('开始向右拖动进度条') size = self.get_size() x_coefficient = 800/size[0] y_coefficient = 1280/size[1] x1 = 100 * x_coefficient x2 = 500 * x_coefficient y = 800 * y_coefficient self.driver.swipe(x1,y,x2,y,3000) self.my_sleep() second_time = music_play_page.get_current_play_time(self) log_utils.C_INFO('当前播放时长为:'+second_time) if second_time > first_time: log_utils.C_INFO('进度条拖动成功') music_play_page.is_music_play_page_playing_song(self) return flag
def music_play_page_progress_bar_display(self): """播放进度条显示, 在歌曲名上方,贴在专辑图底边,显示播放时间和总播放时长,播放歌曲时进度条随着播放时间变化,左右拖动显示拖动的时间和总时间点""" flag = 0 log_utils.C_STEP('开始测试播放进度条拖动及显示') home_music_recommend_page.click_today_recommend_button(self) if self.wait_element_by_mode(base_data.wait_time_mid,By.ID,today_commend_page.today_commend_page_play_all_button_id,'进入今日推荐页')== 1: flag = 1 if not flag == 1: today_commend_page.click_today_commend_page_play_all_button(self) if self.wait_element_by_mode(base_data.wait_time_mid,By.ID,music_play_page.music_play_page_album_pic_id,'进入歌曲播放页') == 1: flag = 2 if not flag == 2: first_time = music_play_page.get_current_play_time(self) log_utils.C_INFO('当前播放时长为:'+first_time) log_utils.C_STEP('开始向右拖动进度条') size = self.get_size() x_coefficient = 800/size[0] y_coefficient = 1280/size[1] x1 = 100 * x_coefficient x2 = 500 * x_coefficient y = 800 * y_coefficient self.driver.swipe(x1,y,x2,y,3000) self.my_sleep() second_time = music_play_page.get_current_play_time(self) log_utils.C_INFO('当前播放时长为:'+second_time) if second_time > first_time: log_utils.C_INFO('进度条拖动成功')
def sign_out(self): """功能: 登出的主过程:点击更多按钮--检查登录态--点击设置按钮--上划--点击退出--点击确认退出 返回值: 0:当前还在登录态,登出失败 1:当前不在登录态,登出成功 2:等待某控件超时,测试失败""" log_utils.C_INFO('开始登出') if self.wait_element_by_mode(base_data.wait_time_long,By.ID,self.more_button_id,'更多按钮') == 1: return 2 self.click_more_button() if self.wait_element_by_mode(base_data.wait_time_mid,By.ID,self.setting_container_id,'更多菜单') == 1: return 2 log_utils.C_STEP('检查登录态') if self.check_is_login_in_more_page() == 0: log_utils.F_ERROR('没有在登陆态,先去退出登录') self.reset_app() if self.login_test() == 0: log_utils.F_ERROR('登录功能已经失效!无法继续测试!') self.tear_down() sys.exit(-1) else: log_utils.C_INFO('登录成功,继续测试!') self.reset_app() log_utils.C_INFO('开始登出') if self.wait_element_by_mode(base_data.wait_time_long,By.ID,self.more_button_id,'更多按钮') == 1: return 2 self.click_more_button() if self.wait_element_by_mode(base_data.wait_time_mid,By.ID,self.setting_container_id,'更多菜单') == 1: return 2 self.click_setting_container() self.my_sleep(3) log_utils.C_STEP('上划屏幕') self.my_swipe('up') self.screenshot('设置页面截图') self.click_signout_button_first() self.my_sleep() self.click_signout_button_second() self.my_sleep() self.click_yes_button() if self.wait_element_by_mode(base_data.wait_time_mid,By.ID,self.more_button_id,'回到主页') == 1: return 2 log_utils.C_STEP('验证是否登出成功,点击更多按钮') self.click_more_button() self.screenshot('登录状态截图') if self.check_is_login_in_more_page() == 1: log_utils.F_FAIL('在登录态,登出失败') return 0 else: log_utils.P_PASS('不在登录态,登出成功') return 1
def taihe_login(self,mode): """功能: 验证太合登录的主过程:验证是否进入登录页--点击进入账号密码登录页--验证是否进入账号密码登录页--输入账号密码--验证登录态 参数: mode:1--输入正确的账号密码 2--输入错误的密码 3--输入错误的账号 返回值: 2:等待某控件超时测试失败 1:在登录态 0:不在登录态 注意: 太合登录有一个输入错误密码次数达到三次的时候就开始弹出验证码的策略,因此不可以连续多次输入错误的密码""" if self.wait_element_by_mode(base_data.wait_time_mid,By.XPATH,self.go_to_baidu_login_button_xpath,'进入登录页') == 1: return 2 self.go_to_account_login_page() if self.wait_element_by_mode(base_data.wait_time_mid,By.XPATH,self.account_login_log_xpath,'进入账号密码登录页') == 1: return 2 if mode == 1: self.input_account(account_data.TAIHE_PHONE_NUMBER) #输入账号密码,点击登录按钮,点击登录后会联网登录,返回首页 self.input_password(account_data.TAIHE_PASSWORD) self.screenshot('输入账号密码截图') self.click_login_button() elif mode == 2: self.input_account(account_data.TAIHE_PHONE_NUMBER) #输入账号密码,点击登录按钮,点击登录后会联网登录,返回首页 self.input_password('wrong_password') #输入错误的密码 self.screenshot('输入账号密码截图') self.click_login_button() log_utils.C_STEP('输入错误的密码,点击登录按钮') #验证错误密码的异常情况的方法是,睡眠几秒,观察是否停留在此页 self.screenshot('输入错误密码后截图') self.my_sleep(5) if self.find_element_and_action(By.XPATH,self.login_button_xpath,self.action.is_displayed,'账号密码登录页') == 0: return 0 else: return 1 if self.wait_element_by_mode(base_data.wait_time_long,By.ID,self.more_button_id,'回到首页') == 1: #验证登录态 return 2 self.click_more_button() self.my_sleep() self.screenshot('登录态截图') if self.check_is_login_in_more_page() == 1: log_utils.C_INFO('在登录态') return 1 else: log_utils.C_INFO('不在登录态') return 0
def __check_result(dic): """功能: 验证错误码,打印对应信息 返回值: 0:正常 1:参数错误""" error_code = dic['error_code'] log_utils.C_INFO('错误码为:'+str(error_code)) if error_code == 22000: log_utils.C_INFO('获取信息成功') return 0 elif error_code == 22005: log_utils.F_ERROR('获取信息失败。') log_utils.F_ERROR('error_message:'+dic['error_message']) return 1 else: log_utils.F_ERROR('未知错误码') return 2
def __init__(self): """功能: 初始化driver""" desired_caps = {} desired_caps['platformName'] = base_data.PlatformName desired_caps['platformVersion'] = base_data.PlatformVersion desired_caps['deviceName'] = base_data.DeviceName desired_caps['appPackage'] = base_data.AppPackage desired_caps['appActivity'] = base_data.AppActivity self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) log_utils.C_INFO('测试开始')
def __get_first_three_song_name_from_songlist(number,url = ''): """功能: 获取新歌榜前number首歌曲名 参数: url: number:获取的歌曲名数量 返回值: 1:获取失败""" dic = __get_info(url) if dic == 1: log_utils.F_ERROR('获取信息失败') return 1 log_utils.C_INFO('该榜单的前 %d 首歌曲名为:'% number) song_name_list={} i=0 while i < number: song_name_list[i] = dic['song_list'][i]['title'] log_utils.C_INFO(str(i+1)+':'+song_name_list[i]) i += 1 return song_name_list
def is_music_play_page_playing_song(self): """功能: 判断是否正在播放歌曲 返回值: 0:正在播放 1:不在播放""" log_utils.C_INFO('验证是否正在播放歌曲') first_time = self.find_element_and_action( By.ID, self.music_play_page_current_time_text_id, self.action.get_text, '获取已播放时长') log_utils.C_INFO('当前已播放时长为:' + first_time + ' 睡眠一段时间') self.my_sleep(5) second_time = self.find_element_and_action( By.ID, self.music_play_page_current_time_text_id, self.action.get_text, '获取已播放时长') log_utils.C_INFO('当前已播放时长为:' + second_time) if second_time > first_time: log_utils.C_INFO('正在播放!') return 0 else: log_utils.C_INFO('没在播放!') return 1
def get_comment_page_title_bar_title_text(self): """获取评论页的标题 返回值: 1:获取失败 title:正常结果""" title = self.find_element_and_action( By.ID, self.comment_page_title_bar_title_id, self.action.get_text, '评论页的标题') if title == 1 or title == 2: log_utils.C_INFO('获取文本失败') self.screenshot('获取评论页的标题失败') return 1 return title
def after_login(self): """功能: 登录前的步骤,主页--点击更多按钮--验证是否在登录态--点击登录进入登录页""" log_utils.C_INFO('开始登陆') self.click_more_button() #点击更多按钮 log_utils.C_INFO('查看登录态开始') self.my_sleep() if self.check_is_login_in_more_page() == 1: log_utils.F_ERROR('已经在登录态了!先去退出登录') self.screenshot('错误--已经在登录态截图') self.reset_app() if self.sign_out() == 0: log_utils.F_ERROR('登出功能已经失效!无法继续测试!程序退出!') self.tear_down() sys.exit(-1) else: log_utils.C_INFO('登出成功!继续测试登录功能!') self.reset_app() log_utils.C_INFO('开始登陆') self.click_more_button() #点击更多按钮 self.click_login_button_in_more_page() #点击立即登录
def login_test02(self): """功能: 太合登录,异常情况,输入错误的密码 注意: 假如输入密码错误次数到3次时,会开始弹出验证码,导致无法继续测试。""" log_utils.C_INFO('开始测试登录的异常情况,输入错误的密码') self.after_login() if self.taihe_login(2) == 0: log_utils.P_PASS('登录失败!测试通过!') return 1 else: log_utils.F_FAIL('异常情况!测试失败!')
def __get_first_three_song_name_from_playlist(number,url = ''): """功能: 获取对应url歌单的前number首歌曲名 参数: number:获取的歌曲名数量 返回值: 1:获取失败""" dic = __get_info(url) if dic == 1: log_utils.F_ERROR('获取信息失败') return 1 song_list_name = dic['result']['info']['list_title'] log_utils.C_INFO('该歌单名为:'+song_list_name) song_name_list={} log_utils.C_INFO('该歌单的前 %d 首歌名为:'%number) i=0 while i < number: song_name_list[i] = dic['result']['songlist'][i]['title'] log_utils.C_INFO(str(i+1)+':'+song_name_list[i]) i += 1 return song_name_list
def login_test01(self): """功能: 太合登录,正常情况,输入正确的账号密码 返回值: 1:登录成功 0:登录失败""" log_utils.C_INFO('开始测试登录功能') self.after_login() if self.taihe_login(1) == 1: log_utils.P_PASS('登录成功!测试通过') return 1 else: log_utils.F_FAIL('登录失败!测试失败') return 0
def find_element_and_action(self, mode, element='', action=None, thing='', keys=''): """功能: 在当前页面上以某种方式查找一个控件,并且对其进行某种操作 参数: mode:以哪种方式寻找控件,必须是以下几种:By.ID, By.CLASS_NAME, By.XPATH, By.NAME element:控件的id或者xpath等,要跟前一项对应, action:对查找元素进行的操作:“is_displayed”、“click”、“send_keys”、“get_text” keys:假如要进行send_keys的操作,就要发送一个keys thing:元素描述 返回值: 0:查找的控件显示\点击成功\输入成功 1:没有输入action参数,错误 2:查找不到要查找的控件,抛出异常 tmpstr:要获取的控件中文本信息 例子: """ try: element_info = self.driver.find_element(mode, element) if action == "is_displayed": element_info.is_displayed() log_utils.C_INFO(thing + '显示正常') return 0 elif action == "click": element_info.click() log_utils.C_STEP('点击' + thing + ' 点击成功') return 0 elif action == "send_keys": element_info.send_keys(keys) log_utils.C_STEP(thing + ' ' + action + ' ' + keys + ' 输入信息成功') return 0 elif action == "get_text": tmp = element_info.text log_utils.C_STEP('获取' + thing + '的文本信息成功') return tmp else: log_utils.F_ERROR(thing + action + ' error') return 1 except: log_utils.F_ERROR(thing + '不在当前页面') self.screenshot('错误截图:要查找控件不在当前页面') return 2
def login_test(self): """功能: 太合登录,正常情况,输入正确的账号密码 返回值: 1:登录成功 0:登录失败""" log_utils.C_INFO('开始测试登录功能') self.after_login() tmp = self.taihe_login(1) if tmp == 1: log_utils.P_PASS('登录成功!测试通过') return 1 elif tmp == 0: log_utils.F_FAIL('登录失败!测试失败') return 0 else: log_utils.F_ERROR('等待超时!测试失败') return 0
def __get_first_list_id_from_playlist(mode,url = ''): """功能: 获取对应歌单列表的一些信息 参数: mode:返回的内容:1:获取对应歌单列表的第一个歌单list_id 2:获取对应歌单列表的第一个歌单的title 返回值: 1:获取失败 """ dic = __get_info(url) if dic == 1: log_utils.F_ERROR('获取信息失败') return 1 if mode == 1: list_id = dic['diyInfo'][0]['list_id'] log_utils.C_INFO('获取的list_id为:'+list_id) return list_id elif mode == 2: list_name = dic['diyInfo'][0]['title'] return list_name
def __get_info(url = '', number = 0): """功能: 根据url获取页面json 返回值: dic:正常的返回信息 1:获取多次失败""" i = number page = urlopen(url) data = page.read() dic = json.loads(data) result = __check_result(dic) if result == 0: return dic elif (not result == 0) and i<3: i += 1 log_utils.C_INFO('获取信息失败,第 %d 次重新获取信息' %i) if __get_info(url,i) == 1: return 1 else: log_utils.F_ERROR('重新获取信息多次失败,请检查接口和url。URL:'+url) return 1
def wait_element_by_mode(self, t, mode, element='', thing=''): """功能: 等待某控件出现,等待一段规定的时间,假如没有出现就会返回1 参数: t:设置等待的时间 mode:查找模式,例如By,ID,By.XPATH element:等待的控件查找依据,比如id,xpath,必须要跟mode的模式相匹配 thing:等待的元素的描述 返回值: 0:等待成功 1:等待失败""" try: WebDriverWait(self.driver, t).until( expected_conditions.presence_of_element_located( (mode, element))) except: log_utils.F_ERROR(thing + '超时') self.screenshot('错误截图:' + thing + '等待超时') return 1 log_utils.C_INFO('等待' + thing + '成功') return 0
def tear_down(self): """功能: 关闭APP,driver退出,结束测试""" self.driver.close_app() self.driver.quit() log_utils.C_INFO('测试结束!')
def song_list_play_test(self): """功能: 测试音乐-榜单页面的播放歌曲的功能,榜单页面的播放歌曲功能(有两个播放全部按钮和点击歌曲条目播放的功能) 步骤: 1.进入音乐--榜单页面 2.获取第一个榜单的第一首歌曲的歌曲名 3.点击第一个榜单的播放全部按钮 4.在跳转到的歌曲播放页中验证正在播放的歌曲是否与第一首歌曲歌名一致 5.点击第一个榜单的‘>’按钮进入第一个榜单页面,通过api获取前三首歌曲的歌曲名,并且跟页面中提取的进行对比 6.获取第三首歌的歌名,并且点击第三首歌条目 7.在跳转到的歌曲播放页中验证正在播放的歌曲是否与第三首歌曲歌名一致 8.点击返回按钮返回榜单页面 9.获取第一首歌名,并且名点击全部播放按钮 10.在跳转到的歌曲播放页中验证正在播放的歌曲是否与第一首歌曲歌名一致 返回值: 4:从api获取某歌曲名失败 3:获取某歌曲名失败,测试失败 2:等待某控件超时,测试失败 1:测试失败 0:测试成功""" flag = 0 log_utils.C_INFO('开始测试音乐--榜单和榜单页面的播放功能') self.click_song_list_button() if self.wait_element_by_mode( base_data.wait_time_mid, By.XPATH, self.first_song_list_play_all_button_xpath, '进入榜单页面') == 1: return 2 tmp = self.get_frist_song_list_frist_song_name() #将获取到的整串信息分割开,提取到歌曲名 tmp_list = tmp.split(' ') first_song_name = tmp_list[1] if first_song_name == 1 or first_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 log_utils.C_STEP('第一个榜单的第一首歌曲名为:' + first_song_name) self.click_first_song_list_play_all_button() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.music_play_page_artist_name_text_id, '进入歌曲播放页') == 1: return 2 self.my_sleep(2) playing_song_name = self.get_music_play_page_playing_song_name() if playing_song_name == 1 or playing_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 log_utils.C_STEP('正在播放的歌曲名是:' + playing_song_name) self.is_music_play_page_playing_song() if first_song_name == playing_song_name: log_utils.P_PASS('两个歌曲名一致,播放第一首歌曲成功,音乐--榜单页面的全部播放按钮功能完好') else: log_utils.F_FAIL('两个歌曲名不一致,播放第一首歌曲失败,音乐--榜单页面的全部播放按钮功能损坏') flag = 1 self.click_music_play_page_back_button() self.my_sleep(3) self.click_first_song_list_enter_button() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.song_list_page_play_all_button_id, '进入第一个榜单的榜单页面') == 1: return 2 second_song_name = self.get_first_song_list_second_song_name() third_song_name = self.get_first_song_list_third_song_name() if third_song_name == 1 or third_song_name == 2 or second_song_name == 1 or second_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 log_utils.C_STEP('第一个榜单的第二首歌曲名为:' + second_song_name) log_utils.C_STEP('第一个榜单的第三首歌曲名为:' + third_song_name) log_utils.C_STEP('开始从api获取热歌榜的前三首歌曲的歌曲名') song_name_list = api_utils.get_new_song_list_first_song_name(3) if not song_name_list == 1: if first_song_name == song_name_list[ 0] and second_song_name == song_name_list[ 1] and third_song_name == song_name_list[2]: log_utils.C_INFO('从api获取的前三首歌曲名与从页面中提取的歌曲名一致') else: log_utils.F_ERROR('从api获取的前三首歌曲名与从页面中提取的歌曲名不一致,请检查相关功能') flag = 2 self.click_third_song_to_play_third_song() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.music_play_page_artist_name_text_id, '进入歌曲播放页') == 1: return 2 self.my_sleep(2) playing_song_name = self.get_music_play_page_playing_song_name() if playing_song_name == 1 or playing_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 log_utils.C_STEP('正在播放的歌曲名是: ' + playing_song_name) self.is_music_play_page_playing_song() if third_song_name == playing_song_name: log_utils.P_PASS('两个歌曲名一致,播放第三首歌曲成功,点击榜单页面的歌曲来播放功能完好') else: log_utils.F_FAIL('两个歌曲名不一致,播放第三首歌曲失败,点击榜单页面的歌曲来播放功能损坏') flag = 1 self.click_music_play_page_back_button() self.my_sleep(3) first_song_name = self.get_first_song_list_first_song_name() if first_song_name == 1 or first_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 log_utils.C_STEP('第一首歌曲的歌曲名为:' + first_song_name) self.click_song_list_play_all_button() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.music_play_page_artist_name_text_id, '进入歌曲播放页') == 1: return 2 self.my_sleep(2) playing_song_name = self.get_music_play_page_playing_song_name() if playing_song_name == 1 or playing_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 log_utils.C_STEP('正在播放的歌曲名是: ' + playing_song_name) self.is_music_play_page_playing_song() if first_song_name == playing_song_name: log_utils.P_PASS('两个歌曲名一致,播放第一首歌曲成功,点击榜单页面的播放全部按钮来播放功能完好') else: log_utils.F_FAIL('两个歌曲名不一致,播放第一首歌曲失败,点击榜单页面的播放全部按钮来播放功能损坏') flag = 1 if flag == 1: return 1 if flag == 2: return 4 return 0
def play_list_top_button_test(self): """对歌单页面上方的控件进行测试,主要是点击后有没有对应的边栏弹出,和会不会跳转到对应的页面 返回值: 1:进入歌单页面超时 2:进入评论页面失败 3:获取评论页的标题失败 4:等待举报栏失败 5:等待分享栏失败 6:进入批量缓存页失败""" flag = 0 log_utils.C_INFO('开始测试歌单页面更多按钮中的各项功能,点击缓存、评论是否能跳转到对应页面,点击分享、举报能否弹出对应栏') self.click_play_list_button() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.play_list_page_newest_button_id, '进入歌单页面') == 1: return 1 self.click_play_list_page_first_play_list() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.play_list_page_play_all_button_id, '进入第一个歌单页') == 1: return 1 log_utils.C_STEP('开始测试点击评论按钮能否跳转到评论页面') play_list_page.click_play_list_page_comment_button(self) if self.wait_element_by_mode( base_data.wait_time_mid, By.ID, comment_page.comment_page_title_bar_title_id, '进入评论页面') == 1: flag = 2 else: title = comment_page.get_comment_page_title_bar_title_text(self) if title == 1: flag = 3 else: log_utils.C_INFO('当前评论页面的标题为:' + title) comment_page.click_comment_page_title_bar_back_button(self) self.my_sleep(3) log_utils.C_STEP('开始测试点击页面上方更多按钮,是否会弹出举报栏') play_list_page.click_play_list_page_more_button(self) if self.wait_element_by_mode( base_data.wait_time_mid, By.ID, play_list_page. play_list_page_more_feedback_play_list_layout_id, '下方举报栏弹出') == 1: flag = 4 else: log_utils.C_INFO('举报栏出现,点击更多按钮功能有效') self.driver.press_keycode(4) self.my_sleep(3) log_utils.C_STEP('开始测试点击页面上方分享按钮,是否会弹出分享栏') play_list_page.click_play_list_page_share_button(self) if self.wait_element_by_mode( base_data.wait_time_mid, By.ID, play_list_page. play_list_page_more_button_share_button_weixin_share_button_id, '下方分享栏弹出') == 1: flag = 5 else: log_utils.C_INFO('分享栏出现,点击分享按钮有效') self.driver.press_keycode(4) self.my_sleep(3) log_utils.C_STEP('开始测试点击缓存按钮会不会跳转到缓存页') play_list_page.click_play_list_page_download_button(self) if self.wait_element_by_mode( base_data.wait_time_mid, By.ID, batch_download_page. batch_download_page_download_layout_button_id, '进入批量缓存页面') == 1: flag = 6 else: log_utils.C_INFO('进入批量缓存页,点击批量缓存按钮功能成功') return flag
def play_list_play_test(self): """功能: 验证歌单页面相关的播放功能,歌单封面的播放按钮、歌单内部的播放全部按钮,点击歌曲进行播放 步骤: 1.进入APP,点击歌单按钮,进入歌单页面,获取第一个歌单的名称 2.点击第一个歌单页面封面的播放按钮 3.进入了歌曲播放页,验证是否正在播放,记录下正在播放的歌曲名称 4.点击歌曲播放页的返回按钮,返回歌单页面,点击第一个歌单的封面进入第一个歌单页面,通过api获取前三首歌曲的歌曲名,跟页面上的歌曲名进行对比 5.获取第一首歌曲的歌曲名,跟之前的歌曲名比较 6.获取第三首歌曲的歌曲名,点击第三首歌曲条目,比较歌曲名,查看是否在播放,点击返回 7.回到歌单页,点击播放全部按钮,比较第一首歌曲的歌曲名,查看是否在播放,点击返回 返回值: 0:测试通过 1:等待某控件超时 2:测试失败不通过 3:获取某文本失败 4:从api获取歌曲名失败""" flag = 0 log_utils.C_INFO('开始测试歌单页面相关的播放功能') self.click_play_list_button() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.play_list_page_newest_button_id, '进入歌单页面') == 1: return 1 first_play_list_name = self.get_play_list_page_first_play_list_name() if first_play_list_name == 1 or first_play_list_name == 2: log_utils.F_ERROR('获取歌单名失败,无法继续测试') return 3 log_utils.C_STEP('第一个歌单名为:' + first_play_list_name) self.click_play_list_page_first_play_list_play_button() self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.music_play_page_song_name_text_id, '进入歌曲播放页') if self.is_music_play_page_playing_song() == 1: log_utils.F_ERROR('歌单封面的播放按钮损坏!') flag = 1 playing_song_name = self.get_music_play_page_playing_song_name() if playing_song_name == 1 or playing_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 self.click_music_play_page_back_button() self.my_sleep(2) self.click_play_list_page_first_play_list() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.play_list_page_play_all_button_id, '进入第一个歌单页') == 1: return 1 tmp = self.get_play_list_page_first_play_list_name() log_utils.C_STEP('当前页面的歌单名为:' + tmp) if tmp == first_play_list_name: log_utils.C_INFO('两歌单名相同,进入对应的歌单页面成功') else: log_utils.F_ERROR('两歌单名不相同,页面不对应') return 1 first_song_name = self.get_play_list_page_first_song_name() second_song_name = self.get_play_list_page_second_song_name() third_song_name = self.get_play_list_page_third_song_name() if first_song_name == 1 or first_song_name == 2 or third_song_name == 1 or third_song_name == 2 or second_song_name == 1 or second_song_name == 2: log_utils.F_ERROR('获取歌曲名失败,无法继续测试') return 3 log_utils.C_INFO('第一首歌曲名为:' + first_song_name) log_utils.C_INFO('第二首歌曲名为:' + second_song_name) log_utils.C_INFO('第三首歌曲名为:' + third_song_name) log_utils.C_STEP('开始从api获取当前歌单的前三首歌曲') song_name_list = api_utils.get_first_play_list_first_song_name( 3) #从api获取前三首歌曲名 if not song_name_list == 1: if first_song_name == song_name_list[ 0] and second_song_name == song_name_list[ 1] and third_song_name == song_name_list[2]: log_utils.C_INFO('从页面上获取的前三首歌曲名信息于从api获取的前三首歌曲名相同') else: log_utils.F_ERROR('从页面上获取的前三首歌曲名信息于从api获取的前三首歌曲名不相同,请检查相关功能') flag = 2 if playing_song_name == first_song_name: log_utils.P_PASS('播放歌曲名与第一首歌曲名相同,歌单封面上的播放按钮功能完好') self.click_play_list_page_third_song_to_play() self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.music_play_page_song_name_text_id, '进入歌曲播放页') self.is_music_play_page_playing_song() tmp = self.get_music_play_page_playing_song_name() log_utils.C_INFO('正在播放的歌曲名为:' + tmp) if tmp == third_song_name: log_utils.P_PASS('正在播放歌曲与第三首歌曲的歌曲名相同,点击歌曲条目来播放歌曲的功能完好') else: log_utils.F_FAIL('正在播放歌曲与第三首歌曲的歌曲名不相同,点击歌曲条目来播放歌曲的功能损坏') flag = 1 self.click_music_play_page_back_button() self.my_sleep(2) self.click_play_list_page_play_all_button() self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.music_play_page_song_name_text_id, '进入歌曲播放页') self.is_music_play_page_playing_song() tmp = self.get_music_play_page_playing_song_name() log_utils.C_INFO('正在播放的歌曲名为:' + tmp) if tmp == first_song_name: log_utils.P_PASS('正在播放歌曲与第一首歌曲的歌曲名相同,点击播放全部按钮来播放歌曲的功能完好') else: log_utils.F_FAIL('正在播放歌曲与第一首歌曲的歌曲名不相同,点击播放全部按钮来播放歌曲的功能损坏') flag = 1 if flag == 1: return 2 elif flag == 2: return 4 return 0
def play_list_more_test(self): """功能: 对歌单页面的更多按钮中的各项功能, 点击缓存按钮后能否弹出到缓存栏,点击喜欢能否收藏歌曲,点击分享是否能弹出分享栏,点击下一首会下一首播放,点击mv会跳转到mv播放页,点击添加到会弹出歌单栏进行测试 步骤: 1.点击进入最热歌单页面,跟从api获取的歌单名相对比 2.点击进入第一个歌单页面,点击播放第三首歌曲,点击返回到歌单页面 3.点击第一首歌的更多按钮,点击下一首播放按钮,点击minibar中的下一曲按钮,验证歌曲名来验证下一首播放按钮功能 4.点击第一首歌的更多按钮,点击喜欢按钮,从api验证是否喜欢成功,点击返回按钮 5.点击第一首歌的更多按钮,点击缓存按钮,检测是否弹出缓存栏,点击返回按钮 6.点击第一首歌的更多按钮,点击分享按钮,检测是否弹出分享栏,点击返回按钮 7.点击第一首歌的更多按钮,点击添加到按钮,检测是否弹出歌单栏,点击返回按钮 8.从api检测第一首歌是否有mv,假如有,点击第一首歌的更多按钮,点击mv按钮,等待是否能进入mv的播放页面 9.测试完毕,返回flag 返回值: 0:测试成功 1:从api获取的歌单名与从页面提取的歌单名不一致 2:从api获取的歌名与正在播放的歌曲名不一致,更多--下一首播放按钮功能损坏 3:从api获取数据失败 4:某控件不存在 5:歌曲没有mv,这个点无法测试 6:收藏不成功 7:从界面获取歌单名失败 8:进入歌单页面超时""" flag = 0 log_utils.C_INFO('开始测试歌单页面更多按钮中的各项功能,点击缓存、评论是否能跳转到对应页面,点击分享、举报能否弹出对应栏') self.click_play_list_button() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.play_list_page_newest_button_id, '进入歌单页面') == 1: return 8 first_play_list_name = self.get_play_list_page_first_play_list_name() if first_play_list_name == 1 or first_play_list_name == 2: log_utils.F_ERROR('从界面获取歌单名失败') flag = 7 log_utils.C_STEP('第一个歌单名为:' + first_play_list_name) log_utils.C_STEP('开始从api获取最热歌单的第一个歌单名') list_name = api_utils.get_first_play_list_name() log_utils.C_INFO('获取到的歌单名为:' + list_name) if not list_name == 1: if not list_name == first_play_list_name: log_utils.F_ERROR('从api获取的歌单名与从页面提取的歌单名不一致!') self.screenshot('从api获取的歌单名与从页面提取的歌单名不一致,从api获取的歌单名为:' + list_name) flag = 1 else: log_utils.C_INFO('从api获取的歌单名与从页面提取的歌单名一致') else: flag = 3 self.click_play_list_page_first_play_list() if self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.play_list_page_play_all_button_id, '进入第一个歌单页') == 1: return 1 self.my_sleep(2) self.click_play_list_page_third_song_to_play() self.wait_element_by_mode(base_data.wait_time_mid, By.ID, self.music_play_page_song_name_text_id, '进入歌曲播放页') self.click_music_play_page_back_button() self.my_sleep(3) self.click_play_list_page_first_song_more_button() #点击第一首歌曲的更多按钮 self.my_sleep(3) self.click_play_list_page_first_song_more_next_play_button() #点击下一首播放 self.my_sleep(2) self.click_play_list_page_minibar_next_song_button() self.my_sleep(2) playing_song_name = self.get_play_list_page_minibar_playing_song_name() log_utils.C_INFO('当前正在播放歌曲名为:' + playing_song_name) log_utils.C_STEP('从api获取歌曲名') song_name_list = api_utils.get_first_play_list_first_song_name(3) if not song_name_list == 1: log_utils.C_INFO('获取到的第一首歌曲名为:' + song_name_list[0]) if not playing_song_name == song_name_list[0]: log_utils.F_ERROR('从api获取的歌名与从页面提取的正在播放歌曲名不一致!') self.screenshot('从api获取的歌名与从页面提取的正在播放歌曲名不一致,从api获取的歌名为:' + song_name_list[0]) flag = 2 else: log_utils.C_INFO('从api获取的歌名与从页面提取的正在播放歌曲名一致,更多--下一首播放功能完好') else: flag = 3 log_utils.C_STEP('开始测试点击喜欢按钮能否喜欢') self.my_sleep(2) self.click_play_list_page_first_song_more_button() self.my_sleep() self.click_play_list_page_first_song_more_favorite_button() self.my_sleep(3) log_utils.C_STEP('开始从api获取用户收藏的信息') collect_song_name_list = api_utils.get_user_collect_song_list() if collect_song_name_list == 1: flag = 3 else: log_utils.C_INFO('从api获取的用户收藏的第一首歌名为:' + collect_song_name_list[0]) if collect_song_name_list[0] == song_name_list[0]: log_utils.C_INFO('用户收藏的第一首歌曲名与本歌单第一首歌曲名相同,收藏成功') else: log_utils.C_INFO('用户收藏的第一首歌曲名与本歌单第一首歌曲名不相同,收藏不成功') flag = 6 self.my_sleep(2) self.click_play_list_page_first_song_more_button() self.my_sleep() self.click_play_list_page_first_song_more_favorite_button() log_utils.C_STEP('开始检查点击缓存按钮能否弹出缓存栏') self.my_sleep(2) self.click_play_list_page_first_song_more_button() self.my_sleep() self.click_play_list_page_first_song_more_download_button() self.my_sleep(3) if self.is_more_button_download_button_download_button_display( ) == 1: #检测缓存栏是否弹出 flag = 4 log_utils.F_ERROR('缓存栏没有弹出') self.driver.press_keycode(4) #点击返回键 log_utils.C_STEP('开始测试点击分享按钮能否弹出分享栏') self.my_sleep(2) self.click_play_list_page_first_song_more_button() self.my_sleep(2) self.click_play_list_page_first_song_more_share_button() self.my_sleep(2) if self.is_more_button_share_button_lyric_poster_display( ) == 1: #检查分享栏是否弹出 flag = 4 log_utils.F_ERROR('分享栏没有弹出') self.driver.press_keycode(4) self.my_sleep(2) self.click_play_list_page_first_song_more_button() self.my_sleep(2) self.click_play_list_page_first_song_more_add_to_button() self.my_sleep(2) if self.is_more_button_add_to_button_play_list_display( ) == 1: #检测歌单栏是否弹出 flag = 4 log_utils.F_ERROR('歌单栏没有弹出') self.driver.press_keycode(4) self.my_sleep(2) log_utils.C_INFO('从api获取has_mv的信息来判断第一首歌曲是否有mv') has_mv_code = api_utils.get_first_play_list_first_song_have_mv( ) #先检查该歌曲是否有mv,假如有点击之后检测是否跳转到mv页面 if has_mv_code == '1': log_utils.C_STEP('第一首歌曲有mv,开始验证点击mv按钮能否跳转到mv页面') self.click_play_list_page_first_song_more_button() self.my_sleep(2) self.click_play_list_page_first_song_more_mv_button() self.wait_element_by_mode(base_data.wait_time_mid, By.ID, mv_page.mv_play_page.mv_play_box_id, '进入mv播放页') log_utils.F_ERROR('成功进入mv播放页') elif has_mv_code == '0': log_utils.F_ERROR('第一首歌曲没有mv,无法测试跳转到mv页面') flag = 5 else: flag = 3 return flag