Appium python+appium 如何判定某元素存在

Nick · 2017年01月12日 · 最后由 冯一博 回复于 2019年07月23日 · 6508 次阅读

在写压力测试 case 的时候,需要判断某个页面的某个元素是否存在,然后再做相应的操作。
直接 if find id 的话会报错跳出,用 try-except 的话也不是很方便。
请问各位大神有没有好的办法可以解决这个问题,谢了😂

共收到 7 条回复 时间 点赞

判断元素是否存在,你应该抽象一个公共的方法出来

def isElement(self,identifyBy,c):
    '''
    Determine whether elements exist
    Usage:
    isElement(By.XPATH,"//a")
    '''
    sleep(1)
    flag=None
    try:
        if identifyBy == "id":
            #self.driver.implicitly_wait(60)
            self.driver.find_element_by_id(c)
        elif identifyBy == "xpath":
            #self.driver.implicitly_wait(60)
            self.driver.find_element_by_xpath(c)
        elif identifyBy == "class":
            self.driver.find_element_by_class_name(c)
        elif identifyBy == "link text":
            self.driver.find_element_by_link_text(c)
        elif identifyBy == "partial link text":
            self.driver.find_element_by_partial_link_text(c)
        elif identifyBy == "name":
            self.driver.find_element_by_name(c)
        elif identifyBy == "tag name":
            self.driver.find_element_by_tag_name(c)
        elif identifyBy == "css selector":
            self.driver.find_element_by_css_selector(c)
        flag = True
    except NoSuchElementException,e:
        flag = False
    finally:
        return flag

@mads 冲你这声亲家

贴下我的处理方式:

// 判断元素是否可见
 def findElement(self, mOperate):
        '''
        查找元素.mOperate是字典
        operate_type:对应的操作
        element_info:元素详情
        find_type: find类型
        '''
        try:
            WebDriverWait(self.cts, common.WAIT_TIME).until(lambda x: elements_by(mOperate, self.cts))
            return True
        except selenium.common.exceptions.TimeoutException:
            return False
        except selenium.common.exceptions.NoSuchElementException:
            print("找不到数据")
            return False

   // 操作之前,需要判断元素是否存在
    def operate_element(self,  mOperate):
        if self.findElement(mOperate):
            elements = {
                common.CLICK: lambda: operate_click(mOperate, self.cts),
                # common.TAP: lambda: operate_tap(mOperate["find_type"], self.cts,  mOperate["element_info"], arg),
                common.SEND_KEYS: lambda: send_keys(mOperate, self.cts),
                common.SWIPELEFT: lambda : opreate_swipe_left(mOperate, self.cts)
            }
            return elements[mOperate["operate_type"]]()
        return False

谢谢各位了,我现在用的方法比较简单粗暴,但很有效果😁
def findItem(self,el):
source = self.driver.page_source
if el in source:
return True
else:
return False

7楼 已删除
# 如果a元素不存在,返回False,否则返回True,简单粗暴
if self.driver.find_elements(*a) == []:
  return False
else:
  return True
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册