mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
增加wait_ele函数
This commit is contained in:
parent
983f68f9be
commit
3c5acc9b3f
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user