python+appium 查找某个元素find_element()并click()点击,正向判断与反判断的方法封装

使用场景:

  在自动化测试过程中,难免会用到反判断,包括异常情况的处理,比如:find_element_by_name('测试') 判断“测试”是否存在,存在则点击,不存在则执行其他条件。先看底层方法,之后将举例说明被封装方法的具体使用。

复制代码
find_element(By.ID,value)
find_element(By.NAME,value)
find_element(By.TAG_NAME,value)
find_element(By.CLASS_NAME,value)

以上方法均可使用,具体可根据实际需要在我封装的find_Element中继续添加
复制代码

 

底层方法介绍:

python安装目录\site-packages\selenium\webdriver\remote\webdriver.py中查找def  find_element方法。如下:

复制代码
def find_element(self, by=By.ID, value=None):
        """
        'Private' method used by the find_element_by_* methods.

        :Usage:
            Use the corresponding find_element_by_* instead of this.

        :rtype: WebElement
        """
        if self.w3c:
            if by == By.ID:
                by = By.CSS_SELECTOR
                value = '[id="%s"]' % value
            elif by == By.TAG_NAME:
                by = By.CSS_SELECTOR
            elif by == By.CLASS_NAME:
                by = By.CSS_SELECTOR
                value = ".%s" % value
            elif by == By.NAME:
                by = By.CSS_SELECTOR
                value = '[name="%s"]' % value
        return self.execute(Command.FIND_ELEMENT, {
            'using': by,
            'value': value})['value']
复制代码

方法的封装:

复制代码
def find_Element(self,type,value):
        '''
        method explain:查找某个元素
        parameter explain: 【type】 取值的类型包括:id\name\class_name...   【value】根据type的类型给值
        Usage:
            device.find_Element('name',"我的認證")
        '''
        logging.info("执行--------find_Element-------方法")
        try:
            if type == 'id':
                try:
                    return self.driver.find_element(By.ID,value)      #查找ID元素,存在则直接返回
                except Exception,e:                        #appium存在元素则直接返回,不存在则跑出异常,因此必须用异常来处理不存在元素的情况
                    logging.info("未找到%type--%value"%(type,value))
                    return False                        #查找ID元素,不存在则返回False
            elif type == 'name':
                try:
                    return self.driver.find_element(By.NAME,value)
                except Exception,e:
                    logging.info("未找到%type--%value"%(type,value))
                    return False
        except:
            logging.warn("此处已抛异常---------------find_Element")
            self.take_screenShot("find_Element")      
       '''
        take_screenShot()自己封装的截图方法,如果你没封装就可以删除掉此句话,或者看链接将此方法添加到你封装py文
        件中:http://www.cnblogs.com/syw20170419/p/8280017.html  
       '''
assert
'find_Element' def click(self): ''' method explain:查找某个元素 parameter explain: 【type】 取值的类型 【value】根据type的类型给值 Undertake method:device.find_Element(type,value) Usage: name_value == device.find_Element(type = 'name',value="我的認證") name_value.click() ''' self.find_Element(type,self.value).click()
复制代码

举例说明被封装方法的使用:

测试步骤:打开短信,点击“新建”创建一条短信并发送

复制代码
具体的封装方法在测试中调用如下:
def creat_Message(self): logging.info("start creat message") '''创建短信''' sleep(5) new = self.device.find_Element(type = 'name',value="新建") #调用封装的find_Element方法
     if new:                    #判断新建存在,则执行点击
       new.click() elif new == False:         #判断新建不存在,则打印log logging.error( '新建不存在')
    
复制代码

 

posted @   Syw_文  阅读(8645)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示