51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3817|回复: 2
打印 上一主题 下一主题

[原创] python selenium 元素定位方法封装

[复制链接]
  • TA的每日心情
    奋斗
    2018-9-1 14:58
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-1-19 21:41:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 a305634841 于 2018-7-28 09:56 编辑

    写好了公用的调用类,接下来就按照pageobject的设计模式写一下基本的元素定位方法,此处我们需要对python的方法传参有所了解,没有自信的同学可以返回前面章节重新学习。先上代码吧:
    1. #the file is base_page.py
    2. #author=abao
    3. # 定位元素方法
    4. def find_element(self,type,position):
    5.   if type == 'xpath':
    6.     element=self.driver.find_element_by_xpath(position)
    7.     #element_exist(element)
    8.     return element
    9.   elif type == 'id':
    10.     element = self.driver.find_element_by_id(position)
    11.     #element_exist( element )
    12.     return element
    13.   elif type =='name':
    14.     element = self.driver.find_element_by_name(position)
    15.     #element_exist( element )
    16.     return element
    17.   elif type == 'link_text':
    18.     element = self.driver.find_element_by_link_text(position)
    19.     #element_exist( element )
    20.     return element
    21.   else:
    22.     print("不支持的类型")
    23.   '''
    24.   try:
    25.     # 确保元素是可见的。
    26.     # 注意:以下入参为元组的元素,需要加*。Python存在这种特性,就是将入参放在元组里。
    27.     WebDriverWait(self.driver,10).until(lambda driver: element.is_displayed())
    28.     # 注意:以下入参本身是元组,不需要加*
    29.     #WebDriverWait( self.driver, 10 ).until( EC.visibility_of_element_located( loc ) )
    30.     return element
    31.   except:
    32.     print("元素没有出现,等待超时")
    33.             '''
    34. # 定位元素方法
    35. def find_elements(self,type,position):
    36.   if type == 'xpath':
    37.     element=self.driver.find_elements_by_xpath(position)
    38.     #element_exist(element)
    39.     return element
    40.   elif type == 'id':
    41.     element = self.driver.find_elements_by_id(position)
    42.     #element_exist( element )
    43.     return element
    44.   elif type =='name':
    45.     element = self.driver.find_elements_by_name(position)
    46.     #element_exist( element )
    47.     return element
    48.   elif type == 'link_text':
    49.     element = self.driver.find_elements_by_link_text(position)
    50.     #element_exist( element )
    51.     return element
    52.   else:
    53.     print("不支持的类型")
    复制代码


    在base_page.py这个文件里我们封装了元素定位的方法,def find_element(self,type,position)方法里传了两个参数进去。参数type负责定位元素的方式,参数position负责type方式下的元素位置,两者结合在一起通过if的语句来判断使用哪种定位方法。同时在这方法里我们也可以看到一个注释掉的语句#element_exist()这条语句是为了判定一下元素是否存在。这个是我自己封装的语句,可以看一下下面的代码。也可以用is_dispaly()webdriver里原装的来判断。
    1. #the file is base_page.py
    2. #author=abao
    3. def element_exist(self,element):
    4.   try:
    5.            
    6.     element
    7.   except NoSuchElementException as msg:
    8.     print("you find element is not exist%s"%msg)
    9.   if element.is_displayed():
    10.     print("元素可见")
    11.   else:
    12.     print("元素不可见")
    复制代码


    在回归到元素定位方法里来,在定位一组元素时需要注意的是element返回的是一个列表,在此方法里如果要对element做判断就需要用到循环语句了,显然是需要重新封装一个判定元素的方法如elements_exist(),作者此处致谢了一下思路代码可能还需要调试,给大家一个动手的机会吧,思路大概是这样的先多次查找等待元素出现,然后循环的把可见元素贾璐到列表中返回列表,其实定位一组元素对于列表里可不可见没有太多的关注,一般都不会二次定位,除非困难的元素可能会用的,可以考虑不去做判断。
    1. #the file is base_page.py
    2. #author=abao
    3. def elements_exist(self, type,position):
    4.   for i in range(5):
    5.     try:
    6.       elements=self.find_elements(type,position)
    7.       num=_len_(elements)
    8.     except:
    9.       time.sleep(3)
    10.     if num >=1:
    11.       break
    12.   display_element=[]
    13.   for j in range(num):
    14.      element=elements._getitem_(j)
    15.      if element.is_displayed():
    16.        display_element.append(element)
    17.   return display_element
    复制代码

    猜想:
    1、入参能不能参数默认值入find_element(self,type='xpath',position)
    或者另外一种find_element(self,*yuansu)
          
    2、里面的元素异常能不能用try  except来捕捉。引用自,百度阅读,。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏2
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    推荐
    发表于 2018-1-22 09:38:15 | 只看该作者

    如果把这篇文章的优势写的更突出,文字少一点我相信会有人看。
    回复 支持 1 反对 0

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-24 18:31 , Processed in 0.065933 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表