增加wait_ele函数

This commit is contained in:
g1879 2020-07-23 14:33:38 +08:00
parent 983f68f9be
commit 3c5acc9b3f

View File

@ -95,13 +95,19 @@ class DriverPage(object):
return self.ele(loc, mode='all', timeout=timeout, show_errmsg=show_errmsg) return self.ele(loc, mode='all', timeout=timeout, show_errmsg=show_errmsg)
# ----------------以下为独有函数----------------------- # ----------------以下为独有函数-----------------------
def wait_ele(self, loc_or_ele, mode: str, timeout: float = None): def wait_ele(self,
""" loc_or_ele: Union[str, tuple, DriverElement, WebElement],
:param loc_or_ele: mode: str,
:param mode: show, hidden, del, timeout: float = None) -> bool:
:param timeout: """等待元素从dom删除、显示、隐藏
:return: :param loc_or_ele: 元素获取元素的字符串或元素的loc
:param mode: 等待方式可选'del', 'visible', 'invisible'
:param timeout: 超时时间
:return: 等待是否成功
""" """
if mode.lower() not in ['del', 'visible', 'invisible']:
raise ValueError('mode can only be "del", "visible", "invisible"')
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec from selenium.webdriver.support import expected_conditions as ec
@ -114,28 +120,35 @@ class DriverPage(object):
is_ele = True is_ele = True
elif isinstance(loc_or_ele, str): elif isinstance(loc_or_ele, str):
loc_or_ele = get_loc_from_str(loc_or_ele) loc_or_ele = get_loc_from_str(loc_or_ele)
elif isinstance(loc_or_ele, tuple):
pass
else:
raise TypeError('The type of loc_or_ele can only be str, tuple, DriverElement, WebElement')
if is_ele: # 当传入参数是元素对象时 if is_ele: # 当传入参数是元素对象时
end_time = time.time() + timeout end_time = time.time() + timeout
if mode == 'del': while time.time() < end_time:
while True: if mode == 'del':
try: try:
loc_or_ele.is_enabled() loc_or_ele.is_enabled()
except: except:
return True return True
if time.time() > end_time: elif mode == 'visible' and loc_or_ele.is_displayed():
return False return True
elif mode == 'visible': elif mode == 'invisible' and not loc_or_ele.is_displayed():
pass return True
elif mode == 'invisible': return False
pass
else: # 当传入参数是控制字符串或元组时 else: # 当传入参数是控制字符串或元组时
if mode == 'del': try:
return WebDriverWait(self.driver, timeout).until_not(ec.presence_of_element_located(*loc_or_ele)) if mode == 'del':
elif mode == 'visible': WebDriverWait(self.driver, timeout).until_not(ec.presence_of_element_located(loc_or_ele))
return WebDriverWait(self.driver, timeout).until(ec.visibility_of_element_located(*loc_or_ele)) elif mode == 'visible':
elif mode == 'invisible': WebDriverWait(self.driver, timeout).until(ec.visibility_of_element_located(loc_or_ele))
return WebDriverWait(self.driver, timeout).until_not(ec.visibility_of_element_located(*loc_or_ele)) elif mode == 'invisible':
WebDriverWait(self.driver, timeout).until_not(ec.visibility_of_element_located(loc_or_ele))
return True
except:
return False
def check_page(self) -> Union[bool, None]: def check_page(self) -> Union[bool, None]:
"""检查页面是否符合预期 """检查页面是否符合预期
@ -191,16 +204,13 @@ class DriverPage(object):
# 根据序号跳转 # 根据序号跳转
self.driver.switch_to.frame(loc_or_ele) self.driver.switch_to.frame(loc_or_ele)
elif isinstance(loc_or_ele, str): elif isinstance(loc_or_ele, str):
if loc_or_ele == 'main': if loc_or_ele == 'main': # 跳转到最上级
# 跳转到最上级
self.driver.switch_to.default_content() self.driver.switch_to.default_content()
elif loc_or_ele == 'parent': elif loc_or_ele == 'parent': # 跳转到上一层
self.driver.switch_to.parent_frame() self.driver.switch_to.parent_frame()
elif ':' not in loc_or_ele and '=' not in loc_or_ele: elif ':' not in loc_or_ele and '=' not in loc_or_ele: # 传入id或name
# 传入id或name
self.driver.switch_to.frame(loc_or_ele) self.driver.switch_to.frame(loc_or_ele)
else: else: # 传入控制字符串
# 传入控制字符串
ele = self.ele(loc_or_ele) ele = self.ele(loc_or_ele)
self.driver.switch_to.frame(ele.inner_ele) self.driver.switch_to.frame(ele.inner_ele)
elif isinstance(loc_or_ele, WebElement): elif isinstance(loc_or_ele, WebElement):