TA的每日心情 | 奋斗 2018-9-1 14:58 |
---|
签到天数: 2 天 连续签到: 1 天 [LV.1]测试小兵
|
本帖最后由 a305634841 于 2018-7-28 09:56 编辑
写好了公用的调用类,接下来就按照pageobject的设计模式写一下基本的元素定位方法,此处我们需要对python的方法传参有所了解,没有自信的同学可以返回前面章节重新学习。先上代码吧:
- #the file is base_page.py
- #author=abao
- # 定位元素方法
- def find_element(self,type,position):
- if type == 'xpath':
- element=self.driver.find_element_by_xpath(position)
- #element_exist(element)
- return element
- elif type == 'id':
- element = self.driver.find_element_by_id(position)
- #element_exist( element )
- return element
- elif type =='name':
- element = self.driver.find_element_by_name(position)
- #element_exist( element )
- return element
- elif type == 'link_text':
- element = self.driver.find_element_by_link_text(position)
- #element_exist( element )
- return element
- else:
- print("不支持的类型")
- '''
- try:
- # 确保元素是可见的。
- # 注意:以下入参为元组的元素,需要加*。Python存在这种特性,就是将入参放在元组里。
- WebDriverWait(self.driver,10).until(lambda driver: element.is_displayed())
- # 注意:以下入参本身是元组,不需要加*
- #WebDriverWait( self.driver, 10 ).until( EC.visibility_of_element_located( loc ) )
- return element
- except:
- print("元素没有出现,等待超时")
- '''
- # 定位元素方法
- def find_elements(self,type,position):
- if type == 'xpath':
- element=self.driver.find_elements_by_xpath(position)
- #element_exist(element)
- return element
- elif type == 'id':
- element = self.driver.find_elements_by_id(position)
- #element_exist( element )
- return element
- elif type =='name':
- element = self.driver.find_elements_by_name(position)
- #element_exist( element )
- return element
- elif type == 'link_text':
- element = self.driver.find_elements_by_link_text(position)
- #element_exist( element )
- return element
- else:
- print("不支持的类型")
复制代码
在base_page.py这个文件里我们封装了元素定位的方法,def find_element(self,type,position)方法里传了两个参数进去。参数type负责定位元素的方式,参数position负责type方式下的元素位置,两者结合在一起通过if的语句来判断使用哪种定位方法。同时在这方法里我们也可以看到一个注释掉的语句#element_exist()这条语句是为了判定一下元素是否存在。这个是我自己封装的语句,可以看一下下面的代码。也可以用is_dispaly()webdriver里原装的来判断。
- #the file is base_page.py
- #author=abao
- def element_exist(self,element):
- try:
-
- element
- except NoSuchElementException as msg:
- print("you find element is not exist%s"%msg)
- if element.is_displayed():
- print("元素可见")
- else:
- print("元素不可见")
复制代码
在回归到元素定位方法里来,在定位一组元素时需要注意的是element返回的是一个列表,在此方法里如果要对element做判断就需要用到循环语句了,显然是需要重新封装一个判定元素的方法如elements_exist(),作者此处致谢了一下思路代码可能还需要调试,给大家一个动手的机会吧,思路大概是这样的先多次查找等待元素出现,然后循环的把可见元素贾璐到列表中返回列表,其实定位一组元素对于列表里可不可见没有太多的关注,一般都不会二次定位,除非困难的元素可能会用的,可以考虑不去做判断。
- #the file is base_page.py
- #author=abao
- def elements_exist(self, type,position):
- for i in range(5):
- try:
- elements=self.find_elements(type,position)
- num=_len_(elements)
- except:
- time.sleep(3)
- if num >=1:
- break
- display_element=[]
- for j in range(num):
- element=elements._getitem_(j)
- if element.is_displayed():
- display_element.append(element)
- return display_element
复制代码
猜想:
1、入参能不能参数默认值入find_element(self,type='xpath',position)
或者另外一种find_element(self,*yuansu)
2、里面的元素异常能不能用try except来捕捉。引用自,百度阅读,。 |
|