在写压力测试 case 的时候,需要判断某个页面的某个元素是否存在,然后再做相应的操作。
直接 if find id 的话会报错跳出,用 try-except 的话也不是很方便。
请问各位大神有没有好的办法可以解决这个问题,谢了
判断元素是否存在,你应该抽象一个公共的方法出来
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
# 如果a元素不存在,返回False,否则返回True,简单粗暴
if self.driver.find_elements(*a) == []:
return False
else:
return True