隐藏

安卓手机自动化测试,appium,用的python,程序里面大循环中,总是报错?

发布:2023/10/22 21:46:22作者:管理员 来源:本站 浏览次数:441

我们通过 appium 的 webdriver 查找控件或者操作控件的时候,如果被查找或被操作的控件不存在,就会报异常。其实很多种情况下由于网速问题,我们查找或操作的控件还没来得及出现,这时候 webdriver 的代码就会误以为控件不存在而报异常。如果我们的代码能等待一段时间就好了,就是说在一定时间内能查找到或操作到这个控件是合理的,超越我们定的时间就认为控件不存在,然后报异常。下面给你举个例子,自己写出等待的逻辑代码如下:import time


'''

功能:

securityfind 函数在规定时间查找到控件并返回该控件,否则返回 None,默认查找 30 次,每次查找后等待 1 秒。

参数说明:

driver:控制浏览器的 webdriver。

tagname:要查找的控件名称,打印出来,给用户自己自己看的。

strtag:查找语法。

flag:查找方法,比如 by_id,by_class_name 等等。

intertime:查找一次等待多久,默认 1 秒。

count:总共查找多少次,默认 30 次。

'''

def securityfind(driver, tagname, strtag, flag, intertime = 1, count = 30):

nowcount = 0

while nowcount < count:

   time.sleep(intertime)

   try:

       if flag == "by_id":

           result = driver.find_element_by_id(strtag)

       elif flag == "by_name":

           result = driver.find_element_by_name(strtag)

       elif flag == "by_class_name":

           result = driver.find_element_by_class_name(strtag)

       elif flag == "by_tag_name":

           result = driver.find_element_by_tag_name(strtag)

       elif flag == "by_link_text":

           result = driver.find_element_by_link_text(strtag)

       elif flag == "by_partial_link_text":

           result = driver.find_element_by_partial_link_text(strtag)

       elif flag == "by_xpath":

           result = driver.find_element_by_xpath(strtag)

       elif flag == "by_css_selector":

           result = driver.find_element_by_css_selector(strtag)

       print "规定时间内找到:" + tagname

       return result  # 找到 tag 就返回

   except:

       nowcount += 1

       print("没找到" + tagname + str(nowcount) + "次")


   print("规定时间次数内没找到:" + tagname)

   return None我们现在举例来使用上面我们自己写的查找等待函数。from selenium import webdriver

import securityfind  # 导入我们自己写的函数


driver = webdriver.Chrome()

driver.get("http://www.baidu.com")


element = securityfind(driver, "百度搜索框", "kw", "by_id", 1, 10)

if element != None:  

   element.send_keys('selenium')

else:

   print("控件不存在")


driver.quit()说明:appium 的 webdriver 用的就是 selenium 里面的 webdriver,使用语法都是一样的,具体更多使用方法你可以参考