def setUp(self): # 获取我们设定的capabilities,通知Appium Server创建相应的会话。 self.desired_caps = desired_capabilities.get_desired_capabilities() # 获取server的地址。 self.uri = desired_capabilities.get_uri() self.timeout = 10 # 获取用户名和密码 self.user = desired_capabilities.getParam("username") self.passwd = desired_capabilities.getParam("password") print "登录用户%s" % self.user self.driver = webdriver.Remote(self.uri, self.desired_caps) self.driver.implicitly_wait(5) boolLoginFlag1 = self.isElementExist(('android uiautomator', 'new UiSelector().resourceId("gaosi.com.learn:id/edt_phone")')) if boolLoginFlag1: print('**************************************登录学生端************************************') self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_phone'), self.user) self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_pass'), self.passwd) time.sleep(2) self.waitForclick(("id", "gaosi.com.learn:id/btn_login")) #点击登录 time.sleep(2) for i in range(0, 3): print("第%s次点击引导页"%(i+1)) time.sleep(2) self.tapScreen(540, 1000) time.sleep(2) # 登录后新账号会提示修改密码,暂不修改 self.is_element_exist_and_click(('id', 'gaosi.com.learn:id/tv_cancel')) print('************************************登录学生端完成**********************************')
def setUp(self): # 获取我们设定的capabilities,通知Appium Server创建相应的会话。 self.desired_caps = desired_capabilities.get_desired_capabilities() # 获取server的地址。 self.uri = desired_capabilities.get_uri() self.timeout = 30 # 获取用户名和密码 self.user = desired_capabilities.getParam("username") self.passwd = desired_capabilities.getParam("password") print "登录用户%s" % self.user self.driver = webdriver.Remote(self.uri, self.desired_caps) self.driver.implicitly_wait(5) boolLoginFlag1 = self.isElementExist( ('android uiautomator', 'new UiSelector().resourceId("gaosi.com.learn:id/edt_phone")')) if boolLoginFlag1: print( '**************************************登录学生端************************************' ) self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_phone'), self.user) self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_pass'), self.passwd) time.sleep(2) self.waitForclick(("id", "gaosi.com.learn:id/btn_login")) #点击登录 #登录后存在个人装扮功能弹窗,点击X关闭(只要不选择性别,就一直会弹窗) self.is_element_exist_and_click( ('id', 'gaosi.com.learn:id/ibBack2')) #time.sleep(5) print( '**************************************登录学生端完成************************************' )
def test_aixuexi_student(self): '''测试学生端学生进行作业提交与作业订正''' # 获取用户名和密码 user = desired_capabilities.getParam("username") passwd = desired_capabilities.getParam("password") print "登录用户%s" % user # 创建会话,得到driver对象,driver对象封装了所有的设备操作。下面会具体讲。 self.desired_caps['recreateChromeDriverSessions'] = True self.driver = webdriver.Remote(self.uri, self.desired_caps) self.driver.implicitly_wait(1) #判断课节元素是否存在,存在则绕过登录点击课节,不存在则登录(兼容某些手机在第一次登录失败,重启app不再登录的问题) boolLoginFlag1 = self.isElementExist(( 'xpath', '//android.support.v7.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.TextView' )) if not boolLoginFlag1: print( '**************************************登录学生端**************************************' ) # #登录前操作 权限允许 # self.is_element_exist_and_click(('id', 'android:id/button1')) time.sleep(3) time.sleep(2) self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_phone'), user) self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_pass'), passwd) time.sleep(2) self.waitForclick(("id", "gaosi.com.learn:id/btn_login")) #点击登录 time.sleep(5) #登录成功后存在弹窗修改密码,暂不修改(随账号,只出现一次) self.is_element_exist_and_click( ("id", "gaosi.com.learn:id/tv_cancel")) # #登录成功后存在弹窗作业宝箱,点击 X 关闭(随账号,只出现一次) self.is_element_exist_and_click( ("id", "gaosi.com.learn:id/ibBack")) #登录后存在个人装扮功能弹窗,点击X关闭(只要不选择性别,就一直会弹窗) self.is_element_exist_and_click( ('id', 'gaosi.com.learn:id/ibBack2')) print( '**************************************登录成功**************************************' ) print("++++++++++++++开始测试装扮流程++++++++++++++++++") time.sleep(5) self.tapScreen(800, 300) #点击头像 try: print(u'头像坐标') self.is_element_exist_and_click( ('id', 'gaosi.com.learn:id/llMan')) #第一次使用选择男女 self.is_element_exist_and_click( ('id', 'gaosi.com.learn:id/tvComfirm')) #确定 time.sleep(5) self.driver.find_element_by_android_uiautomator( 'new UiSelector().className("android.widget.TextView").text("抽取装扮")' ).click() except: self.tapScreen(810, 1830) #点击我的 print(u'我的坐标') self.is_element_exist_and_click( ('id', 'gaosi.com.learn:id/llMan')) #第一次使用选择男女 self.is_element_exist_and_click( ('id', 'gaosi.com.learn:id/tvComfirm')) #确定 time.sleep(5) self.waitForclick(( 'android uiautomator', 'new UiSelector().className("android.widget.TextView").text("抽取装扮")' )) time.sleep(5) self.driver.switch_to.context(u'WEBVIEW_gaosi.com.learn') print("切换成功") self.switchUrl(self.driver, "extractingstaticHtml.html") time.sleep(2) if self.isElementExist( ('xpath', "//div[@class=\"extractChooseBtn\"][text()='免费召唤UFO']")): self.waitForclick( ('xpath', "//div[@class=\"extractChooseBtn\"][text()='免费召唤UFO']")) else: self.waitForclick(('xpath', "//i[contains(text(),'召唤UFO')]")) time.sleep(10) self.click_element_or_coordinate( ('xpath', '//button[@class="notSave"]'), 540, 1340) time.sleep(3) self.switchUrl(self.driver, "dressSelfstaticHtml.html") time.sleep(8) if self.isElementExist(('xpath', "//span[text()='new']/parent::div")): self.scrollToFind(('xpath', "//span[text()='new']/parent::div")) self.waitForclick( ('xpath', "//span[text()='new']/parent::div")) #点击刚刚获取的装扮 else: elements = self.findelements( ('xpath', '//div[@class="dressDetail"]/div[@class="innerDress"]')) elements[0].click() time.sleep(2) self.waitForclick(('xpath', "//div[text()='保存装扮']")) # result = self.get_Toast(u'装扮保存成功') # self.assertTrue(result) print("++++++++++++++测试完成++++++++++++++++++")
def test_aixuexi_student(self): '''测试学生端学生进行作业提交与作业订正''' # 获取用户名和密码 user = desired_capabilities.getParam("username") passwd = desired_capabilities.getParam("password") boolFlag1=True intFlag1=0 chromedriver = ['2.24', '2.23', '2.22', '2.20', '2.34', '2.32', '2.30', '2.28', '2.26', '2.18', '2.16', '2.14'] while boolFlag1: try: print "登录用户%s" % user # 创建会话,得到driver对象,driver对象封装了所有的设备操作。下面会具体讲。 self.desired_caps['recreateChromeDriverSessions'] = True self.driver = webdriver.Remote(self.uri, self.desired_caps) self.driver.implicitly_wait(15) #判断课节元素是否存在,存在则绕过登录点击课节,不存在则登录(兼容某些手机在第一次登录失败,重启app不再登录的问题) boolLoginFlag1 = self.isElementExist(('xpath', '//android.support.v7.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.TextView')) if not boolLoginFlag1: print('**************************************登录学生端************************************') # #登录前操作 权限允许 # self.is_element_exist_and_click(('id', 'android:id/button1')) time.sleep(2) self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_phone'), user) self.sendkeys_text(('id', 'gaosi.com.learn:id/edt_pass'), passwd) time.sleep(2) self.waitForclick(("id", "gaosi.com.learn:id/btn_login")) #点击登录 time.sleep(5) #登录成功后存在弹窗修改密码,暂不修改(随账号,只出现一次) self.is_element_exist_and_click(("id", "gaosi.com.learn:id/tv_cancel")) # #登录成功后存在弹窗作业宝箱,点击 X 关闭(随账号,只出现一次) self.is_element_exist_and_click(("id", "gaosi.com.learn:id/ibBack")) #登录后存在个人装扮功能弹窗,点击X关闭(只要不选择性别,就一直会弹窗) self.is_element_exist_and_click(('id', 'gaosi.com.learn:id/ibBack2')) # self.is_element_exist_and_click(('id', 'gaosi.com.learn:id/llMan'))#第一次使用选择男女 # self.is_element_exist_and_click(('id', 'gaosi.com.learn:id/tvComfirm'))#确定 time.sleep(2) self.waitForclick(('xpath', '//android.support.v7.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.TextView')) #点击讲次 time.sleep(5) intCount = 0 while intCount < 5: try: element1 = WebDriverWait(self.driver, 3, 0.5).until(EC.visibility_of_element_located(('xpath', '//android.support.v7.widget.RecyclerView/android.widget.LinearLayout[1]/android.widget.TextView'))) element1.click() except: pass time.sleep(5) intCount = intCount + 1 contexts = self.driver.contexts print contexts if u'WEBVIEW_gaosi.com.learn' in contexts: break time.sleep(5) self.driver.switch_to.context(u'WEBVIEW_gaosi.com.learn') print self.driver.current_context boolFlag1 = False except Exception, e: self.driver.quit() print Exception, ":", e self.desired_caps['chromedriverExecutable'] = '/appium/appium/node_modules/appium-chromedriver/chromedriver/linux/chromedriver_64_'+chromedriver[intFlag1] print "chromedriver版本:%s" % chromedriver[intFlag1] intFlag1=intFlag1+1 if intFlag1 == len(chromedriver): self.assertFalse(boolFlag1, "没有找到webview!") break continue
def test_aixuexi(self): # 获取用户名和密码 user = desired_capabilities.getParam("username") passwd = desired_capabilities.getParam("password") boolFlag1 = True boolLoginFlag1 = False intFlag1 = 0 chromedriver = [ '2.33', '2.30', '2.28', '2.24', '2.23', '2.22', '2.20', '2.18', '2.16', '2.14' ] print("登录用户%s" % user) while boolFlag1: try: # 创建会话,得到driver对象,driver对象封装了所有的设备操作。下面会具体讲。 self.desired_caps['recreateChromeDriverSessions'] = True self.driver = webdriver.Remote(self.uri, self.desired_caps) self.driver.implicitly_wait(15) time.sleep(5) if not boolLoginFlag1: time.sleep(8) self.driver.find_element_by_id( "gaosi.com.learn:id/tv_login_phone").send_keys(user) #self.driver.find_element_by_id("gaosi.com.learn:id/tv_login_phone").click() self.driver.find_element_by_id( "gaosi.com.learn:id/tv_login_pwd").send_keys(passwd) #self.driver.find_element_by_id("gaosi.com.learn:id/tv_login_pwd").click() time.sleep(2) self.driver.find_element_by_id( "gaosi.com.learn:id/btn_login").click() boolLoginFlag1 = True time.sleep(20) intCount = 0 while intCount < 10: time.sleep(1) intCount = intCount + 1 contexts = self.driver.contexts print(contexts) if u'WEBVIEW_gaosi.com.learn' in contexts: print("adfasd") break self.driver.switch_to.context('WEBVIEW_gaosi.com.learn') self.driver.switch_to.default_content() #self.driver.switch_to.context(contexts[1]) print(self.driver.current_context) boolFlag1 = False except ZeroDivisionError: self.driver.quit() boolLoginFlag1 = True print("ZeroDivision") self.desired_caps[ 'chromedriverExecutable'] = '/usr/lib/node_modules/appium/node_modules/appium-chromedriver/chromedriver/linux/chromedriver_64_' + chromedriver[ intFlag1] # self.desired_caps['chromedriverExecutable'] = 'C:\\Users\\hp\\AppData\\Roaming\\npm\\node_modules\\appium\\build\\chromedriver\\windows\\chromedriver'+chromedriver[intFlag1]+'.exe' if boolLoginFlag1: self.desired_caps[ 'appWaitActivity'] = '.studentapp.main.MainActivity' print("chromedriver版本:%s" % chromedriver[intFlag1]) intFlag1 = intFlag1 + 1 if intFlag1 == len(chromedriver): self.assertFalse(boolFlag1, "没有找到webview!") break continue #**************************************登录学生端************************************** # self.switchUrl(self.driver,"loginstaticHtml.html") # time.sleep(2) # print "++++++++++++++开始登录++++++++++++++++++" # self.waitForclick(self.driver,"//a[contains(text(),'收不到验证码?使用账号密码登录')]") # time.sleep(3) # self.waitForInputAndClick(self.driver,"(//input[@placeholder='报名时登记的手机号'])[2]",user) # self.waitForInputAndClick(self.driver,"//input[@placeholder='请输入密码']",passwd) # element=self.driver.find_element_by_xpath("//button[@class='mint-button mint-button--primary mint-button--large']") # self.driver.execute_script("arguments[0].removeAttribute('disabled')",element) # element.click() # **************************************登录学生端************************************** self.switchUrl(self.driver, "indexstaticHtml.html") time.sleep(2) print("++++++++++++++开始答题++++++++++++++++++") self.waitForclickpass(self.driver, "//button[text()='关闭']") time.sleep(3) self.waitForclickpass(self.driver, "//div[@class='todo-work']") time.sleep(6) self.switchUrl(self.driver, "homeworkstaticHtml.html") time.sleep(2) self.waitForclick(self.driver, "(//div[@class='modules-class-time'])[1]") #选课节 time.sleep(3) self.waitForclick(self.driver, "//label[text()='开始交作业']/parent::button") time.sleep(5) self.switchUrl(self.driver, "zuoyestaticHtml.html") time.sleep(2) blankcontent = 1 strflag = False while True: #填空题 blanks = self.driver.find_elements_by_xpath( "//input[@class='blanks-answer' and @data-node='blankAnswer']") if len(blanks) > 0: for blank in blanks: if blank.get_attribute('style') != "display: none;": #blank.send_keys(blankcontent) self.driver.execute_script( "arguments[0].setAttribute('value', arguments[1])", blank, blankcontent) # self.driver.execute_script("arguments[0].innerHTML=arguments[1]", element, '18700000107') blank.click() blankcontent = blankcontent + 1 #判断题 selections = self.driver.find_elements_by_xpath( "//div[@class='select']") if len(selections) > 0: for selection in selections: if selection.find_element_by_xpath( "../../../..").get_attribute('style').find( 'overflow: hidden;') == -1: selection.find_element_by_xpath("//label[1]").click() #选择题 options = self.driver.find_elements_by_xpath( "//li[@class='single']") if len(options) > 0: for option in options: if option.find_element_by_xpath("../../..").get_attribute( 'style').find('overflow: hidden;') == -1: option.click() break #主观题-拍照i answers = self.driver.find_elements_by_xpath( "//img[@class='unanswer']") if len(answers) > 0: for answer in answers: if answer.find_element_by_xpath( "../../../..").get_attribute('style').find( 'overflow: hidden;') == -1: answer.click() time.sleep(1) answer.find_element_by_xpath( "../following-sibling::div[1]/a").click() time.sleep(2) self.waitForclick( self.driver, "//div[@class='modules-homework-pageUpDown-down']") # 下一题目 if strflag: break time.sleep(2) if self.driver.find_element_by_xpath( "//div[@class='modules-homework-pageUpDown-down']/span[1]" ).text == "完成": strflag = True time.sleep(5) self.switchUrl(self.driver, "anscardstaticHtml.html") time.sleep(2) print("++++++++++++++开始提交作业++++++++++++++++++") self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) #提交作业 time.sleep(6) contexts = self.driver.contexts print(contexts) self.driver.switch_to.context('NATIVE_APP') time.sleep(2) self.driver.find_element_by_id("android:id/button1").click() # time.sleep(8) # self.waitForclick(self.driver,"//button[@class='msgbox-btn msgbox-confirm ']") time.sleep(8) view = self.driver.find_elements_by_accessibility_id("习惯是很大的力量哦,要坚持!") if len(view) > 0: self.driver.find_element_by_accessibility_id( "习惯是很大的力量哦,要坚持!").click() time.sleep(5) view = self.driver.find_elements_by_accessibility_id("每答对1题得3个金币") if len(view) > 0: self.driver.find_element_by_accessibility_id("每答对1题得3个金币").click() time.sleep(6) contexts = self.driver.contexts print(contexts) # os.system('taskkill /F /im chromedriver.exe') print(self.driver.current_context) time.sleep(15) self.driver.switch_to.context('WEBVIEW_gaosi.com.learn') time.sleep(2) contexts = self.driver.contexts print(contexts) print(self.driver.current_context) self.switchUrl(self.driver, "scorestaticHtml.html") time.sleep(5) #self.waitForclick(self.driver, "//div[@class='score-container']") #time.sleep(10) #self.waitForclick(self.driver, "//div[@class='modules-glod-img modules-bg1']") #time.sleep(5) self.waitForclick( self.driver, "//button[@class='mint-button score-submit error-question mint-button--primary mint-button--large']" ) #去订正 time.sleep(5) print("去订正") self.switchUrl(self.driver, "correctionstaticHtml.html") time.sleep(2) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) # 第一题 print("开始订正第1题") self.switchUrl(self.driver, "correctProstaticHtml.html") #订正页面 time.sleep(2) self.waitForOptionsClick(self.driver, "//li[@class='single']", 1) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) #第二题 print("开始订正第2题") self.switchUrl(self.driver, "correctionstaticHtml.html") time.sleep(2) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) self.switchUrl(self.driver, "correctProstaticHtml.html") time.sleep(2) self.waitForOptionsClick(self.driver, "//li[@class='single']", 0) self.waitForOptionsClick(self.driver, "//li[@class='single']", 2) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) # 第三题 print("开始订正第3题") self.switchUrl(self.driver, "correctionstaticHtml.html") time.sleep(2) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) self.switchUrl(self.driver, "correctProstaticHtml.html") time.sleep(2) self.waitForDoubleInputAndClick( self.driver, "//input[@class='blanks-answer' and @data-node='blankAnswer']", "40", "50") self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) # 第四题 print("开始订正第4题") self.switchUrl(self.driver, "correctionstaticHtml.html") time.sleep(2) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) self.switchUrl(self.driver, "correctProstaticHtml.html") time.sleep(2) self.waitForOptionsClick(self.driver, "//label[@class='default right']", 0) self.waitForOptionsClick(self.driver, "//label[@class='default wrong']", 1) self.waitForOptionsClick(self.driver, "//label[@class='default wrong']", 1) self.waitForOptionsClick(self.driver, "//label[@class='default wrong']", 1) self.waitForOptionsClick(self.driver, "//label[@class='default wrong']", 1) self.waitForOptionsClick(self.driver, "//label[@class='default right']", 4) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) # 第五题 print("开始订正第5题") self.switchUrl(self.driver, "correctionstaticHtml.html") time.sleep(2) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) self.switchUrl(self.driver, "correctProstaticHtml.html") time.sleep(2) self.waitForOptionsClick(self.driver, "//li[@class='single']", 0) self.waitForOptionsClick(self.driver, "//li[@class='single']", 0) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) # 第六题 print("开始订正第6题") self.switchUrl(self.driver, "correctionstaticHtml.html") time.sleep(2) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) self.switchUrl(self.driver, "correctProstaticHtml.html") time.sleep(2) self.waitForOptionsClick(self.driver, "//li[@class='single']", 0) self.waitForclick( self.driver, "//button[@class='mint-button score-submit mint-button--primary mint-button--large']" ) # # 第七题 # print "开始订正第7题" # self.switchUrl(self.driver, "correctionstaticHtml.html") # time.sleep(2) # self.waitForclick(self.driver, # "//button[@class='mint-button score-submit mint-button--primary mint-button--large']") # self.switchUrl(self.driver, "correctProstaticHtml.html") # time.sleep(2) # self.waitForDoubleInputAndClick(self.driver,"//input[@class='blanks-answer' and @data-node='blankAnswer']","草盛豆苗稀","带月荷锄归") # self.waitForclick(self.driver, # "//button[@class='mint-button score-submit mint-button--primary mint-button--large']") print("结束订正并返回") self.switchUrl(self.driver, "correctionstaticHtml.html") self.waitForclick(self.driver, "//span[@class='mint-button-icon']") time.sleep(2) self.switchUrl(self.driver, "scorestaticHtml.html") time.sleep(2) self.waitForclick(self.driver, "//span[@class='mint-button-icon']") time.sleep(2) self.switchUrl(self.driver, "indexstaticHtml.html") time.sleep(2) self.waitForclickpass(self.driver, "//button[text()='关闭']") time.sleep(3) self.switchUrl(self.driver, "minestaticHtml.html") time.sleep(2) print("++++++++++++++开始退出++++++++++++++++++") self.waitForclick(self.driver, "//div[@class='mine-setting']") #设置 time.sleep(2) self.switchUrl(self.driver, "settingstaticHtml.html") time.sleep(2) self.waitForclick( self.driver, "//button[@class='mint-button mint-button--danger mint-button--large']" ) #退出登录 time.sleep(3) self.driver.switch_to.context('NATIVE_APP') time.sleep(2) self.driver.find_element_by_id("android:id/button1").click() # time.sleep(5) # self.waitForclick(self.driver, "//button[@class='msgbox-btn msgbox-confirm ']") time.sleep(2)