mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
删除元素__getitem__();基本完成筛选器
This commit is contained in:
parent
5221ea3cb0
commit
dd1d5f30bc
@ -91,14 +91,6 @@ class ChromiumElement(DrissionElement):
|
|||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return self._backend_id == getattr(other, '_backend_id', None)
|
return self._backend_id == getattr(other, '_backend_id', None)
|
||||||
|
|
||||||
def __getattr__(self, item):
|
|
||||||
"""获取元素属性
|
|
||||||
:param item: 属性名
|
|
||||||
:return: 属性值
|
|
||||||
"""
|
|
||||||
a = self.attr(item)
|
|
||||||
return a if a is not None else self.property(item)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def tag(self):
|
def tag(self):
|
||||||
"""返回元素tag"""
|
"""返回元素tag"""
|
||||||
@ -307,7 +299,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 直接子元素或节点文本组成的列表
|
:return: 直接子元素或节点文本组成的列表
|
||||||
"""
|
"""
|
||||||
return super().children(locator, timeout, ele_only=ele_only)
|
return ChromiumElementsList(self.owner, super().children(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def prevs(self, locator='', timeout=None, ele_only=True):
|
def prevs(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回当前元素前面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
"""返回当前元素前面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -316,7 +308,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
"""
|
"""
|
||||||
return super().prevs(locator, timeout, ele_only=ele_only)
|
return ChromiumElementsList(self.owner, super().prevs(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def nexts(self, locator='', timeout=None, ele_only=True):
|
def nexts(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回当前元素后面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
"""返回当前元素后面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -325,7 +317,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 兄弟元素或节点文本组成的列表
|
:return: 兄弟元素或节点文本组成的列表
|
||||||
"""
|
"""
|
||||||
return super().nexts(locator, timeout, ele_only=ele_only)
|
return ChromiumElementsList(self.owner, super().nexts(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def befores(self, locator='', timeout=None, ele_only=True):
|
def befores(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回文档中当前元素前面符合条件的元素或节点组成的列表,可用查询语法筛选
|
"""返回文档中当前元素前面符合条件的元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -335,7 +327,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
"""
|
"""
|
||||||
return super().befores(locator, timeout, ele_only=ele_only)
|
return ChromiumElementsList(self.owner, super().befores(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def afters(self, locator='', timeout=None, ele_only=True):
|
def afters(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回文档中当前元素后面符合条件的元素或节点组成的列表,可用查询语法筛选
|
"""返回文档中当前元素后面符合条件的元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -345,7 +337,7 @@ class ChromiumElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 本元素后面的元素或节点组成的列表
|
:return: 本元素后面的元素或节点组成的列表
|
||||||
"""
|
"""
|
||||||
return super().afters(locator, timeout, ele_only=ele_only)
|
return ChromiumElementsList(self.owner, super().afters(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def on(self, timeout=None):
|
def on(self, timeout=None):
|
||||||
"""获取覆盖在本元素上最上层的元素
|
"""获取覆盖在本元素上最上层的元素
|
||||||
@ -1199,7 +1191,7 @@ def find_by_xpath(ele, xpath, index, timeout, relative=True):
|
|||||||
res = ele.owner.run_cdp('Runtime.getProperties', objectId=res['result']['objectId'],
|
res = ele.owner.run_cdp('Runtime.getProperties', objectId=res['result']['objectId'],
|
||||||
ownProperties=True)['result'][:-1]
|
ownProperties=True)['result'][:-1]
|
||||||
if index is None:
|
if index is None:
|
||||||
r = ChromiumElementsList(ele.owner)
|
r = ChromiumElementsList(page=ele.owner)
|
||||||
for i in res:
|
for i in res:
|
||||||
if i['value']['type'] == 'object':
|
if i['value']['type'] == 'object':
|
||||||
r.append(make_chromium_eles(ele.owner, _ids=i['value']['objectId'], is_obj_id=True))
|
r.append(make_chromium_eles(ele.owner, _ids=i['value']['objectId'], is_obj_id=True))
|
||||||
@ -1228,7 +1220,7 @@ def find_by_xpath(ele, xpath, index, timeout, relative=True):
|
|||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
return NoneElement(ele.owner) if index is not None else ChromiumElementsList(ele.owner)
|
return NoneElement(ele.owner) if index is not None else ChromiumElementsList(page=ele.owner)
|
||||||
|
|
||||||
|
|
||||||
def find_by_css(ele, selector, index, timeout):
|
def find_by_css(ele, selector, index, timeout):
|
||||||
@ -1274,7 +1266,7 @@ def find_by_css(ele, selector, index, timeout):
|
|||||||
|
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
return NoneElement(ele.owner) if index is not None else ChromiumElementsList(ele.owner)
|
return NoneElement(ele.owner) if index is not None else ChromiumElementsList(page=ele.owner)
|
||||||
|
|
||||||
|
|
||||||
def make_chromium_eles(page, _ids, index=1, is_obj_id=True, ele_only=False):
|
def make_chromium_eles(page, _ids, index=1, is_obj_id=True, ele_only=False):
|
||||||
@ -1306,7 +1298,7 @@ def make_chromium_eles(page, _ids, index=1, is_obj_id=True, ele_only=False):
|
|||||||
return get_node_func(page, obj_id, ele_only)
|
return get_node_func(page, obj_id, ele_only)
|
||||||
|
|
||||||
else: # 获取全部
|
else: # 获取全部
|
||||||
nodes = ChromiumElementsList()
|
nodes = ChromiumElementsList(page=page)
|
||||||
for obj_id in _ids:
|
for obj_id in _ids:
|
||||||
tmp = get_node_func(page, obj_id, ele_only)
|
tmp = get_node_func(page, obj_id, ele_only)
|
||||||
if tmp is False:
|
if tmp is False:
|
||||||
|
@ -57,8 +57,6 @@ class ChromiumElement(DrissionElement):
|
|||||||
|
|
||||||
def __eq__(self, other: ChromiumElement) -> bool: ...
|
def __eq__(self, other: ChromiumElement) -> bool: ...
|
||||||
|
|
||||||
def __getattr__(self, item: str) -> str: ...
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def tag(self) -> str: ...
|
def tag(self) -> str: ...
|
||||||
|
|
||||||
@ -139,27 +137,27 @@ class ChromiumElement(DrissionElement):
|
|||||||
def children(self,
|
def children(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[ChromiumElement, str]]: ...
|
ele_only: bool = True) -> Union[ChromiumElementsList, List[Union[ChromiumElement, str]]]: ...
|
||||||
|
|
||||||
def prevs(self,
|
def prevs(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[ChromiumElement, str]]: ...
|
ele_only: bool = True) -> Union[ChromiumElementsList, List[Union[ChromiumElement, str]]]: ...
|
||||||
|
|
||||||
def nexts(self,
|
def nexts(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[ChromiumElement, str]]: ...
|
ele_only: bool = True) -> Union[ChromiumElementsList, List[Union[ChromiumElement, str]]]: ...
|
||||||
|
|
||||||
def befores(self,
|
def befores(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[ChromiumElement, str]]: ...
|
ele_only: bool = True) -> Union[ChromiumElementsList, List[Union[ChromiumElement, str]]]: ...
|
||||||
|
|
||||||
def afters(self,
|
def afters(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[ChromiumElement, str]]: ...
|
ele_only: bool = True) -> Union[ChromiumElementsList, List[Union[ChromiumElement, str]]]: ...
|
||||||
|
|
||||||
def on(self, timeout: float = None) -> ChromiumElement: ...
|
def on(self, timeout: float = None) -> ChromiumElement: ...
|
||||||
|
|
||||||
@ -343,8 +341,7 @@ class ShadowRoot(BaseElement):
|
|||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
index: Optional[int] = 1,
|
index: Optional[int] = 1,
|
||||||
relative: bool = False,
|
relative: bool = False,
|
||||||
raise_err: bool = None) -> Union[ChromiumElement, ChromiumFrame, str,
|
raise_err: bool = None) -> Union[ChromiumElement, ChromiumFrame, str, ChromiumElementsList]: ...
|
||||||
List[Union[ChromiumElement, ChromiumFrame, str]]]: ...
|
|
||||||
|
|
||||||
def _get_node_id(self, obj_id: str) -> int: ...
|
def _get_node_id(self, obj_id: str) -> int: ...
|
||||||
|
|
||||||
|
@ -51,13 +51,6 @@ class SessionElement(DrissionElement):
|
|||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return self.xpath == getattr(other, 'xpath', None)
|
return self.xpath == getattr(other, 'xpath', None)
|
||||||
|
|
||||||
def __getattr__(self, item):
|
|
||||||
"""获取元素属性
|
|
||||||
:param item: 属性名
|
|
||||||
:return: 属性值
|
|
||||||
"""
|
|
||||||
return self.attr(item)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def tag(self):
|
def tag(self):
|
||||||
"""返回元素类型"""
|
"""返回元素类型"""
|
||||||
@ -157,7 +150,7 @@ class SessionElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 直接子元素或节点文本组成的列表
|
:return: 直接子元素或节点文本组成的列表
|
||||||
"""
|
"""
|
||||||
return super().children(locator, timeout, ele_only=ele_only)
|
return SessionElementsList(self.owner, super().children(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def prevs(self, locator='', timeout=None, ele_only=True):
|
def prevs(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回当前元素前面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
"""返回当前元素前面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -166,7 +159,7 @@ class SessionElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 同级元素或节点文本组成的列表
|
:return: 同级元素或节点文本组成的列表
|
||||||
"""
|
"""
|
||||||
return super().prevs(locator, timeout, ele_only=ele_only)
|
return SessionElementsList(self.owner, super().prevs(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def nexts(self, locator='', timeout=None, ele_only=True):
|
def nexts(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回当前元素后面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
"""返回当前元素后面符合条件的同级元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -175,7 +168,7 @@ class SessionElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 同级元素或节点文本组成的列表
|
:return: 同级元素或节点文本组成的列表
|
||||||
"""
|
"""
|
||||||
return super().nexts(locator, timeout, ele_only=ele_only)
|
return SessionElementsList(self.owner, super().nexts(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def befores(self, locator='', timeout=None, ele_only=True):
|
def befores(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回文档中当前元素前面符合条件的元素或节点组成的列表,可用查询语法筛选
|
"""返回文档中当前元素前面符合条件的元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -185,7 +178,7 @@ class SessionElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 本元素前面的元素或节点组成的列表
|
:return: 本元素前面的元素或节点组成的列表
|
||||||
"""
|
"""
|
||||||
return super().befores(locator, timeout, ele_only=ele_only)
|
return SessionElementsList(self.owner, super().befores(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def afters(self, locator='', timeout=None, ele_only=True):
|
def afters(self, locator='', timeout=None, ele_only=True):
|
||||||
"""返回文档中当前元素后面符合条件的元素或节点组成的列表,可用查询语法筛选
|
"""返回文档中当前元素后面符合条件的元素或节点组成的列表,可用查询语法筛选
|
||||||
@ -195,7 +188,7 @@ class SessionElement(DrissionElement):
|
|||||||
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
:param ele_only: 是否只获取元素,为False时把文本、注释节点也纳入
|
||||||
:return: 本元素后面的元素或节点组成的列表
|
:return: 本元素后面的元素或节点组成的列表
|
||||||
"""
|
"""
|
||||||
return super().afters(locator, timeout, ele_only=ele_only)
|
return SessionElementsList(self.owner, super().afters(locator, timeout, ele_only=ele_only))
|
||||||
|
|
||||||
def attr(self, name):
|
def attr(self, name):
|
||||||
"""返回attribute属性值
|
"""返回attribute属性值
|
||||||
@ -402,7 +395,7 @@ def make_session_ele(html_or_ele, loc=None, index=1, method=None):
|
|||||||
|
|
||||||
# 把lxml元素对象包装成SessionElement对象并按需要返回一个或全部
|
# 把lxml元素对象包装成SessionElement对象并按需要返回一个或全部
|
||||||
if index is None:
|
if index is None:
|
||||||
r = SessionElementsList(page)
|
r = SessionElementsList(page=page)
|
||||||
for e in eles:
|
for e in eles:
|
||||||
if e != '\n':
|
if e != '\n':
|
||||||
r.append(SessionElement(e, page) if isinstance(e, HtmlElement) else e)
|
r.append(SessionElement(e, page) if isinstance(e, HtmlElement) else e)
|
||||||
|
@ -36,8 +36,6 @@ class SessionElement(DrissionElement):
|
|||||||
|
|
||||||
def __eq__(self, other: SessionElement) -> bool: ...
|
def __eq__(self, other: SessionElement) -> bool: ...
|
||||||
|
|
||||||
def __getattr__(self, item: str) -> str: ...
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def tag(self) -> str: ...
|
def tag(self) -> str: ...
|
||||||
|
|
||||||
@ -93,27 +91,27 @@ class SessionElement(DrissionElement):
|
|||||||
def children(self,
|
def children(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[SessionElement, str]]: ...
|
ele_only: bool = True) -> Union[SessionElementsList, List[Union[SessionElement, str]]]: ...
|
||||||
|
|
||||||
def prevs(self,
|
def prevs(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[SessionElement, str]]: ...
|
ele_only: bool = True) -> Union[SessionElementsList, List[Union[SessionElement, str]]]: ...
|
||||||
|
|
||||||
def nexts(self,
|
def nexts(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[SessionElement, str]]: ...
|
ele_only: bool = True) -> Union[SessionElementsList, List[Union[SessionElement, str]]]: ...
|
||||||
|
|
||||||
def befores(self,
|
def befores(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[SessionElement, str]]: ...
|
ele_only: bool = True) -> Union[SessionElementsList, List[Union[SessionElement, str]]]: ...
|
||||||
|
|
||||||
def afters(self,
|
def afters(self,
|
||||||
locator: Union[Tuple[str, str], str] = '',
|
locator: Union[Tuple[str, str], str] = '',
|
||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
ele_only: bool = True) -> List[Union[SessionElement, str]]: ...
|
ele_only: bool = True) -> Union[SessionElementsList, List[Union[SessionElement, str]]]: ...
|
||||||
|
|
||||||
def attr(self, name: str) -> Optional[str]: ...
|
def attr(self, name: str) -> Optional[str]: ...
|
||||||
|
|
||||||
|
@ -11,11 +11,9 @@ from .._elements.none_element import NoneElement
|
|||||||
|
|
||||||
|
|
||||||
class SessionElementsList(list):
|
class SessionElementsList(list):
|
||||||
def __init__(self, page=None):
|
def __init__(self, page=None, *args):
|
||||||
super().__init__()
|
super().__init__(*args)
|
||||||
self._page = page
|
self._page = page
|
||||||
self._filter = None
|
|
||||||
self._filter_one = None
|
|
||||||
self._getter = None
|
self._getter = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -26,30 +24,22 @@ class SessionElementsList(list):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def filter(self):
|
def filter(self):
|
||||||
if self._filter is None:
|
return SessionFilter(self)
|
||||||
self._filter = SessionFilter(self)
|
|
||||||
return self._filter
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def filter_one(self):
|
def filter_one(self):
|
||||||
if self._filter_one is None:
|
return SessionFilterOne(self)
|
||||||
self._filter_one = SessionFilterOne(self)
|
|
||||||
return self._filter_one
|
|
||||||
|
|
||||||
|
|
||||||
class ChromiumElementsList(SessionElementsList):
|
class ChromiumElementsList(SessionElementsList):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def filter(self):
|
def filter(self):
|
||||||
if self._filter is None:
|
return ChromiumFilter(self)
|
||||||
self._filter = ChromiumFilter(self)
|
|
||||||
return self._filter
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def filter_one(self):
|
def filter_one(self):
|
||||||
if self._filter_one is None:
|
return ChromiumFilterOne(self)
|
||||||
self._filter_one = ChromiumFilterOne(self)
|
|
||||||
return self._filter_one
|
|
||||||
|
|
||||||
def search(self, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
def search(self, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
||||||
have_rect=None, have_text=None):
|
have_rect=None, have_text=None):
|
||||||
@ -63,28 +53,13 @@ class ChromiumElementsList(SessionElementsList):
|
|||||||
:param have_text: 是否含有文本,bool,None为忽略该项
|
:param have_text: 是否含有文本,bool,None为忽略该项
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
r = ChromiumElementsList(self._page)
|
return _search(self, displayed=displayed, checked=checked, selected=selected, enabled=enabled,
|
||||||
for i in self:
|
clickable=clickable, have_rect=have_rect, have_text=have_text)
|
||||||
if ((displayed is not None and (displayed is True and i.states.is_displayed) or (
|
|
||||||
displayed is False and not i.states.is_displayed))
|
|
||||||
or (checked is not None and (checked is True and i.states.is_checked) or (
|
|
||||||
checked is False and not i.states.is_checked))
|
|
||||||
or (selected is not None and (selected is True and i.states.is_selected) or (
|
|
||||||
selected is False and not i.states.is_selected))
|
|
||||||
or (enabled is not None and (enabled is True and i.states.is_enabled) or (
|
|
||||||
enabled is False and not i.states.is_enabled))
|
|
||||||
or (clickable is not None and (clickable is True and i.states.is_clickable) or (
|
|
||||||
clickable is False and not i.states.is_clickable))
|
|
||||||
or (have_rect is not None and (have_rect is True and i.states.has_rect) or (
|
|
||||||
have_rect is False and not i.states.has_rect))
|
|
||||||
or (have_text is not None and (have_text is True and i.raw_text) or (
|
|
||||||
have_text is False and not i.raw_text))):
|
|
||||||
r.append(i)
|
|
||||||
return ChromiumFilter(r)
|
|
||||||
|
|
||||||
def search_one(self, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
def search_one(self, index=1, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
||||||
have_rect=None, have_text=None):
|
have_rect=None, have_text=None):
|
||||||
"""或关系筛选元素
|
"""或关系筛选元素,获取一个结果
|
||||||
|
:param index: 元素序号,从1开始
|
||||||
:param displayed: 是否显示,bool,None为忽略该项
|
:param displayed: 是否显示,bool,None为忽略该项
|
||||||
:param checked: 是否被选中,bool,None为忽略该项
|
:param checked: 是否被选中,bool,None为忽略该项
|
||||||
:param selected: 是否被选择,bool,None为忽略该项
|
:param selected: 是否被选择,bool,None为忽略该项
|
||||||
@ -94,27 +69,8 @@ class ChromiumElementsList(SessionElementsList):
|
|||||||
:param have_text: 是否含有文本,bool,None为忽略该项
|
:param have_text: 是否含有文本,bool,None为忽略该项
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
for i in self:
|
return _search_one(self, index=index, displayed=displayed, checked=checked, selected=selected,
|
||||||
if ((displayed is not None and (displayed is True and i.states.is_displayed) or (
|
enabled=enabled, clickable=clickable, have_rect=have_rect, have_text=have_text)
|
||||||
displayed is False and not i.states.is_displayed))
|
|
||||||
or (checked is not None and (checked is True and i.states.is_checked) or (
|
|
||||||
checked is False and not i.states.is_checked))
|
|
||||||
or (selected is not None and (selected is True and i.states.is_selected) or (
|
|
||||||
selected is False and not i.states.is_selected))
|
|
||||||
or (enabled is not None and (enabled is True and i.states.is_enabled) or (
|
|
||||||
enabled is False and not i.states.is_enabled))
|
|
||||||
or (clickable is not None and (clickable is True and i.states.is_clickable) or (
|
|
||||||
clickable is False and not i.states.is_clickable))
|
|
||||||
or (have_rect is not None and (have_rect is True and i.states.has_rect) or (
|
|
||||||
have_rect is False and not i.states.has_rect))
|
|
||||||
or (have_text is not None and (have_text is True and i.raw_text) or (
|
|
||||||
have_text is False and not i.raw_text))):
|
|
||||||
return i
|
|
||||||
|
|
||||||
return NoneElement(self._page, method='filter()', args={'displayed': displayed,
|
|
||||||
'checked': checked, 'selected': selected,
|
|
||||||
'enabled': enabled, 'clickable': clickable,
|
|
||||||
'have_rect': have_rect, 'have_text': have_text})
|
|
||||||
|
|
||||||
|
|
||||||
class SessionFilterOne(object):
|
class SessionFilterOne(object):
|
||||||
@ -123,6 +79,11 @@ class SessionFilterOne(object):
|
|||||||
self._index = 1
|
self._index = 1
|
||||||
|
|
||||||
def __call__(self, index=1):
|
def __call__(self, index=1):
|
||||||
|
"""返回结果中第几个元素
|
||||||
|
:param index: 元素序号,从1开始
|
||||||
|
:return: 对象自身
|
||||||
|
"""
|
||||||
|
print('s')
|
||||||
self._index = index
|
self._index = index
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@ -142,23 +103,23 @@ class SessionFilterOne(object):
|
|||||||
:param contain: 是否包含该字符串,False表示不包含
|
:param contain: 是否包含该字符串,False表示不包含
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
|
num = 0
|
||||||
if contain:
|
if contain:
|
||||||
num = 0
|
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
t = i.raw_text
|
t = i if isinstance(i, str) else i.raw_text
|
||||||
if (fuzzy and text in t) or (not fuzzy and text == t):
|
if (fuzzy and text in t) or (not fuzzy and text == t):
|
||||||
num += 1
|
num += 1
|
||||||
if self._index == num:
|
if self._index == num:
|
||||||
return i
|
return i
|
||||||
else:
|
else:
|
||||||
num = 0
|
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
t = i.raw_text
|
t = i if isinstance(i, str) else i.raw_text
|
||||||
if (fuzzy and text not in t) or (not fuzzy and text != t):
|
if (fuzzy and text not in t) or (not fuzzy and text != t):
|
||||||
num += 1
|
num += 1
|
||||||
if self._index == num:
|
if self._index == num:
|
||||||
return i
|
return i
|
||||||
return NoneElement(self._list._page, 'text()', args={'text': text, 'fuzzy': fuzzy, 'contain': contain})
|
return NoneElement(self._list._page, 'text()',
|
||||||
|
args={'text': text, 'fuzzy': fuzzy, 'contain': contain, 'index': self._index})
|
||||||
|
|
||||||
def _get_attr(self, name, value, method, equal=True):
|
def _get_attr(self, name, value, method, equal=True):
|
||||||
"""返回通过某个方法可获得某个值的元素
|
"""返回通过某个方法可获得某个值的元素
|
||||||
@ -167,21 +128,21 @@ class SessionFilterOne(object):
|
|||||||
:param method: 方法名称
|
:param method: 方法名称
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
|
num = 0
|
||||||
if equal:
|
if equal:
|
||||||
num = 0
|
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
if getattr(i, method)(name) == value:
|
if not isinstance(i, str) and getattr(i, method)(name) == value:
|
||||||
num += 1
|
num += 1
|
||||||
if self._index == num:
|
if self._index == num:
|
||||||
return i
|
return i
|
||||||
else:
|
else:
|
||||||
num = 0
|
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
if getattr(i, method)(name) != value:
|
if not isinstance(i, str) and getattr(i, method)(name) != value:
|
||||||
num += 1
|
num += 1
|
||||||
if self._index == num:
|
if self._index == num:
|
||||||
return i
|
return i
|
||||||
return NoneElement(self._list._page, f'{method}()', args={'name': name, 'value': value, 'equal': equal})
|
return NoneElement(self._list._page, f'{method}()',
|
||||||
|
args={'name': name, 'value': value, 'equal': equal, 'index': self._index})
|
||||||
|
|
||||||
|
|
||||||
class SessionFilter(SessionFilterOne):
|
class SessionFilter(SessionFilterOne):
|
||||||
@ -210,19 +171,8 @@ class SessionFilter(SessionFilterOne):
|
|||||||
:param contain: 是否包含该字符串,False表示不包含
|
:param contain: 是否包含该字符串,False表示不包含
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
r = SessionElementsList(self._list._page)
|
self._list = _text_all(self._list, SessionElementsList(page=self._list._page),
|
||||||
if contain:
|
text=text, fuzzy=fuzzy, contain=contain)
|
||||||
for i in self._list:
|
|
||||||
t = i.raw_text
|
|
||||||
if (fuzzy and text in t) or (not fuzzy and text == t):
|
|
||||||
r.append(i)
|
|
||||||
else:
|
|
||||||
for i in self._list:
|
|
||||||
t = i.raw_text
|
|
||||||
if (fuzzy and text not in t) or (not fuzzy and text != t):
|
|
||||||
r.append(i)
|
|
||||||
self._list = r
|
|
||||||
return self
|
|
||||||
|
|
||||||
def _get_attr(self, name, value, method, equal=True):
|
def _get_attr(self, name, value, method, equal=True):
|
||||||
"""返回通过某个方法可获得某个值的元素
|
"""返回通过某个方法可获得某个值的元素
|
||||||
@ -231,16 +181,8 @@ class SessionFilter(SessionFilterOne):
|
|||||||
:param method: 方法名称
|
:param method: 方法名称
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
r = SessionElementsList(self._list._page)
|
self._list = _get_attr_all(self._list, SessionElementsList(page=self._list._page),
|
||||||
if equal:
|
name=name, value=value, method=method, equal=equal)
|
||||||
for i in self._list:
|
|
||||||
if getattr(i, method)(name) == value:
|
|
||||||
r.append(i)
|
|
||||||
else:
|
|
||||||
for i in self._list:
|
|
||||||
if getattr(i, method)(name) != value:
|
|
||||||
r.append(i)
|
|
||||||
self._list = r
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
@ -312,21 +254,20 @@ class ChromiumFilterOne(SessionFilterOne):
|
|||||||
:param equal: 是否是指定状态,False表示否定状态
|
:param equal: 是否是指定状态,False表示否定状态
|
||||||
:return: 选中的元素
|
:return: 选中的元素
|
||||||
"""
|
"""
|
||||||
|
num = 0
|
||||||
if equal:
|
if equal:
|
||||||
num = 0
|
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
if getattr(i.states, name):
|
if not isinstance(i, str) and getattr(i.states, name):
|
||||||
num += 1
|
num += 1
|
||||||
if self._index == num:
|
if self._index == num:
|
||||||
return i
|
return i
|
||||||
else:
|
else:
|
||||||
num = 0
|
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
if not getattr(i.states, name):
|
if not isinstance(i, str) and not getattr(i.states, name):
|
||||||
num += 1
|
num += 1
|
||||||
if self._index == num:
|
if self._index == num:
|
||||||
return i
|
return i
|
||||||
return NoneElement(self._list._page, f'{name}()', args={'equal': equal})
|
return NoneElement(self._list._page, f'{name}()', args={'equal': equal, 'index': self._index})
|
||||||
|
|
||||||
|
|
||||||
class ChromiumFilter(ChromiumFilterOne):
|
class ChromiumFilter(ChromiumFilterOne):
|
||||||
@ -344,9 +285,14 @@ class ChromiumFilter(ChromiumFilterOne):
|
|||||||
return self._list[item]
|
return self._list[item]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def search_one(self, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
def get(self):
|
||||||
|
"""返回用于获取元素属性的对象"""
|
||||||
|
return self._list.get
|
||||||
|
|
||||||
|
def search_one(self, index=1, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
||||||
have_rect=None, have_text=None):
|
have_rect=None, have_text=None):
|
||||||
"""或关系筛选元素
|
"""或关系筛选元素,获取一个结果
|
||||||
|
:param index: 元素序号,从1开始
|
||||||
:param displayed: 是否显示,bool,None为忽略该项
|
:param displayed: 是否显示,bool,None为忽略该项
|
||||||
:param checked: 是否被选中,bool,None为忽略该项
|
:param checked: 是否被选中,bool,None为忽略该项
|
||||||
:param selected: 是否被选择,bool,None为忽略该项
|
:param selected: 是否被选择,bool,None为忽略该项
|
||||||
@ -356,10 +302,9 @@ class ChromiumFilter(ChromiumFilterOne):
|
|||||||
:param have_text: 是否含有文本,bool,None为忽略该项
|
:param have_text: 是否含有文本,bool,None为忽略该项
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
return self._list.search_one(displayed=displayed, checked=checked, selected=selected, enabled=enabled,
|
return _search_one(self._list, index=index, displayed=displayed, checked=checked, selected=selected,
|
||||||
clickable=clickable, have_rect=have_rect, have_text=have_text)
|
enabled=enabled, clickable=clickable, have_rect=have_rect, have_text=have_text)
|
||||||
|
|
||||||
@property
|
|
||||||
def search(self, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
def search(self, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
||||||
have_rect=None, have_text=None):
|
have_rect=None, have_text=None):
|
||||||
"""或关系筛选元素
|
"""或关系筛选元素
|
||||||
@ -372,8 +317,8 @@ class ChromiumFilter(ChromiumFilterOne):
|
|||||||
:param have_text: 是否含有文本,bool,None为忽略该项
|
:param have_text: 是否含有文本,bool,None为忽略该项
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
return self._list.search(displayed=displayed, checked=checked, selected=selected, enabled=enabled,
|
return _search(self._list, displayed=displayed, checked=checked, selected=selected, enabled=enabled,
|
||||||
clickable=clickable, have_rect=have_rect, have_text=have_text)
|
clickable=clickable, have_rect=have_rect, have_text=have_text)
|
||||||
|
|
||||||
def text(self, text, fuzzy=True, contain=True):
|
def text(self, text, fuzzy=True, contain=True):
|
||||||
"""以是否含有指定文本为条件筛选元素
|
"""以是否含有指定文本为条件筛选元素
|
||||||
@ -382,18 +327,8 @@ class ChromiumFilter(ChromiumFilterOne):
|
|||||||
:param contain: 是否包含该字符串,False表示不包含
|
:param contain: 是否包含该字符串,False表示不包含
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
r = ChromiumElementsList(self._list._page)
|
self._list = _text_all(self._list, ChromiumElementsList(page=self._list._page),
|
||||||
if contain:
|
text=text, fuzzy=fuzzy, contain=contain)
|
||||||
for i in self._list:
|
|
||||||
t = i.raw_text
|
|
||||||
if (fuzzy and text in t) or (not fuzzy and text == t):
|
|
||||||
r.append(i)
|
|
||||||
else:
|
|
||||||
for i in self._list:
|
|
||||||
t = i.raw_text
|
|
||||||
if (fuzzy and text not in t) or (not fuzzy and text != t):
|
|
||||||
r.append(i)
|
|
||||||
self._list = r
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def _get_attr(self, name, value, method, equal=True):
|
def _get_attr(self, name, value, method, equal=True):
|
||||||
@ -403,16 +338,8 @@ class ChromiumFilter(ChromiumFilterOne):
|
|||||||
:param method: 方法名称
|
:param method: 方法名称
|
||||||
:return: 筛选结果
|
:return: 筛选结果
|
||||||
"""
|
"""
|
||||||
r = ChromiumElementsList(self._list._page)
|
self._list = _get_attr_all(self._list, ChromiumElementsList(page=self._list._page),
|
||||||
if equal:
|
name=name, value=value, method=method, equal=equal)
|
||||||
for i in self._list:
|
|
||||||
if getattr(i, method)(name) == value:
|
|
||||||
r.append(i)
|
|
||||||
else:
|
|
||||||
for i in self._list:
|
|
||||||
if getattr(i, method)(name) != value:
|
|
||||||
r.append(i)
|
|
||||||
self._list = r
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def _any_state(self, name, equal=True):
|
def _any_state(self, name, equal=True):
|
||||||
@ -421,14 +348,14 @@ class ChromiumFilter(ChromiumFilterOne):
|
|||||||
:param equal: 是否是指定状态,False表示否定状态
|
:param equal: 是否是指定状态,False表示否定状态
|
||||||
:return: 选中的列表
|
:return: 选中的列表
|
||||||
"""
|
"""
|
||||||
r = ChromiumElementsList(self._list._page)
|
r = ChromiumElementsList(page=self._list._page)
|
||||||
if equal:
|
if equal:
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
if getattr(i.states, name):
|
if not isinstance(i, str) and getattr(i.states, name):
|
||||||
r.append(i)
|
r.append(i)
|
||||||
else:
|
else:
|
||||||
for i in self._list:
|
for i in self._list:
|
||||||
if not getattr(i.states, name):
|
if not isinstance(i, str) and not getattr(i.states, name):
|
||||||
r.append(i)
|
r.append(i)
|
||||||
self._list = r
|
self._list = r
|
||||||
return self
|
return self
|
||||||
@ -440,18 +367,18 @@ class Getter(object):
|
|||||||
|
|
||||||
def links(self):
|
def links(self):
|
||||||
"""返回所有元素的link属性组成的列表"""
|
"""返回所有元素的link属性组成的列表"""
|
||||||
return [e.link for e in self._list]
|
return [e.link for e in self._list if not isinstance(e, str)]
|
||||||
|
|
||||||
def texts(self):
|
def texts(self):
|
||||||
"""返回所有元素的text属性组成的列表"""
|
"""返回所有元素的text属性组成的列表"""
|
||||||
return [e.text for e in self._list]
|
return [e if isinstance(e, str) else e.text for e in self._list]
|
||||||
|
|
||||||
def attrs(self, name):
|
def attrs(self, name):
|
||||||
"""返回所有元素指定的attr属性组成的列表
|
"""返回所有元素指定的attr属性组成的列表
|
||||||
:param name: 属性名称
|
:param name: 属性名称
|
||||||
:return: 属性文本组成的列表
|
:return: 属性文本组成的列表
|
||||||
"""
|
"""
|
||||||
return [e.attr(name) for e in self._list]
|
return [e.attr(name) for e in self._list if not isinstance(e, str)]
|
||||||
|
|
||||||
|
|
||||||
def get_eles(locators, owner, any_one=False, first_ele=True, timeout=10):
|
def get_eles(locators, owner, any_one=False, first_ele=True, timeout=10):
|
||||||
@ -476,5 +403,109 @@ def get_eles(locators, owner, any_one=False, first_ele=True, timeout=10):
|
|||||||
return res
|
return res
|
||||||
if False not in res.values():
|
if False not in res.values():
|
||||||
break
|
break
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def _get_attr_all(src_list, aim_list, name, value, method, equal=True):
|
||||||
|
if equal:
|
||||||
|
for i in src_list:
|
||||||
|
if not isinstance(i, str) and getattr(i, method)(name) == value:
|
||||||
|
aim_list.append(i)
|
||||||
|
else:
|
||||||
|
for i in src_list:
|
||||||
|
if not isinstance(i, str) and getattr(i, method)(name) != value:
|
||||||
|
aim_list.append(i)
|
||||||
|
return aim_list
|
||||||
|
|
||||||
|
|
||||||
|
def _text_all(src_list, aim_list, text, fuzzy=True, contain=True):
|
||||||
|
"""以是否含有指定文本为条件筛选元素
|
||||||
|
:param text: 用于匹配的文本
|
||||||
|
:param fuzzy: 是否模糊匹配
|
||||||
|
:param contain: 是否包含该字符串,False表示不包含
|
||||||
|
:return: 筛选结果
|
||||||
|
"""
|
||||||
|
if contain:
|
||||||
|
for i in src_list:
|
||||||
|
t = i if isinstance(i, str) else i.raw_text
|
||||||
|
if (fuzzy and text in t) or (not fuzzy and text == t):
|
||||||
|
aim_list.append(i)
|
||||||
|
else:
|
||||||
|
for i in src_list:
|
||||||
|
t = i if isinstance(i, str) else i.raw_text
|
||||||
|
if (fuzzy and text not in t) or (not fuzzy and text != t):
|
||||||
|
aim_list.append(i)
|
||||||
|
return aim_list
|
||||||
|
|
||||||
|
|
||||||
|
def _search(_list, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
||||||
|
have_rect=None, have_text=None):
|
||||||
|
"""或关系筛选元素
|
||||||
|
:param displayed: 是否显示,bool,None为忽略该项
|
||||||
|
:param checked: 是否被选中,bool,None为忽略该项
|
||||||
|
:param selected: 是否被选择,bool,None为忽略该项
|
||||||
|
:param enabled: 是否可用,bool,None为忽略该项
|
||||||
|
:param clickable: 是否可点击,bool,None为忽略该项
|
||||||
|
:param have_rect: 是否拥有大小和位置,bool,None为忽略该项
|
||||||
|
:param have_text: 是否含有文本,bool,None为忽略该项
|
||||||
|
:return: 筛选结果
|
||||||
|
"""
|
||||||
|
r = ChromiumElementsList(page=_list._page)
|
||||||
|
for i in _list:
|
||||||
|
if not isinstance(i, str) and (
|
||||||
|
(displayed is not None and (displayed is True and i.states.is_displayed)
|
||||||
|
or (displayed is False and not i.states.is_displayed))
|
||||||
|
or (checked is not None and (checked is True and i.states.is_checked)
|
||||||
|
or (checked is False and not i.states.is_checked))
|
||||||
|
or (selected is not None and (selected is True and i.states.is_selected)
|
||||||
|
or (selected is False and not i.states.is_selected))
|
||||||
|
or (enabled is not None and (enabled is True and i.states.is_enabled)
|
||||||
|
or (enabled is False and not i.states.is_enabled))
|
||||||
|
or (clickable is not None and (clickable is True and i.states.is_clickable)
|
||||||
|
or (clickable is False and not i.states.is_clickable))
|
||||||
|
or (have_rect is not None and (have_rect is True and i.states.has_rect)
|
||||||
|
or (have_rect is False and not i.states.has_rect))
|
||||||
|
or (have_text is not None and (have_text is True and i.raw_text)
|
||||||
|
or (have_text is False and not i.raw_text))):
|
||||||
|
r.append(i)
|
||||||
|
return ChromiumFilter(r)
|
||||||
|
|
||||||
|
|
||||||
|
def _search_one(_list, index=1, displayed=None, checked=None, selected=None, enabled=None, clickable=None,
|
||||||
|
have_rect=None, have_text=None):
|
||||||
|
"""或关系筛选元素,获取一个结果
|
||||||
|
:param index: 元素序号,从1开始
|
||||||
|
:param displayed: 是否显示,bool,None为忽略该项
|
||||||
|
:param checked: 是否被选中,bool,None为忽略该项
|
||||||
|
:param selected: 是否被选择,bool,None为忽略该项
|
||||||
|
:param enabled: 是否可用,bool,None为忽略该项
|
||||||
|
:param clickable: 是否可点击,bool,None为忽略该项
|
||||||
|
:param have_rect: 是否拥有大小和位置,bool,None为忽略该项
|
||||||
|
:param have_text: 是否含有文本,bool,None为忽略该项
|
||||||
|
:return: 筛选结果
|
||||||
|
"""
|
||||||
|
num = 0
|
||||||
|
for i in _list:
|
||||||
|
if not isinstance(i, str) and (
|
||||||
|
(displayed is not None and (displayed is True and i.states.is_displayed)
|
||||||
|
or (displayed is False and not i.states.is_displayed))
|
||||||
|
or (checked is not None and (checked is True and i.states.is_checked)
|
||||||
|
or (checked is False and not i.states.is_checked))
|
||||||
|
or (selected is not None and (selected is True and i.states.is_selected)
|
||||||
|
or (selected is False and not i.states.is_selected))
|
||||||
|
or (enabled is not None and (enabled is True and i.states.is_enabled)
|
||||||
|
or (enabled is False and not i.states.is_enabled))
|
||||||
|
or (clickable is not None and (clickable is True and i.states.is_clickable)
|
||||||
|
or (clickable is False and not i.states.is_clickable))
|
||||||
|
or (have_rect is not None and (have_rect is True and i.states.has_rect)
|
||||||
|
or (have_rect is False and not i.states.has_rect))
|
||||||
|
or (have_text is not None and (have_text is True and i.raw_text)
|
||||||
|
or (have_text is False and not i.raw_text))):
|
||||||
|
num += 1
|
||||||
|
if num == index:
|
||||||
|
return i
|
||||||
|
|
||||||
|
return NoneElement(_list._page, method='filter()', args={'displayed': displayed,
|
||||||
|
'checked': checked, 'selected': selected,
|
||||||
|
'enabled': enabled, 'clickable': clickable,
|
||||||
|
'have_rect': have_rect, 'have_text': have_text})
|
||||||
|
@ -21,11 +21,9 @@ def get_eles(locators: Union[List[str], tuple],
|
|||||||
|
|
||||||
class SessionElementsList(list):
|
class SessionElementsList(list):
|
||||||
_page = ...
|
_page = ...
|
||||||
_filter: Optional[SessionFilter] = ...
|
|
||||||
_filter_one: Optional[SessionFilterOne] = ...
|
|
||||||
_getter: Optional[Getter] = ...
|
_getter: Optional[Getter] = ...
|
||||||
|
|
||||||
def __init__(self, page=None): ...
|
def __init__(self, page=None, *args): ...
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def get(self) -> Getter: ...
|
def get(self) -> Getter: ...
|
||||||
@ -40,8 +38,6 @@ class SessionElementsList(list):
|
|||||||
|
|
||||||
|
|
||||||
class ChromiumElementsList(SessionElementsList):
|
class ChromiumElementsList(SessionElementsList):
|
||||||
_filter: Optional[ChromiumFilter] = ...
|
|
||||||
_filter_one: Optional[ChromiumFilterOne] = ...
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def filter(self) -> ChromiumFilter: ...
|
def filter(self) -> ChromiumFilter: ...
|
||||||
@ -59,6 +55,7 @@ class ChromiumElementsList(SessionElementsList):
|
|||||||
have_text: Optional[bool] = None) -> ChromiumFilter: ...
|
have_text: Optional[bool] = None) -> ChromiumFilter: ...
|
||||||
|
|
||||||
def search_one(self,
|
def search_one(self,
|
||||||
|
index: int = 1,
|
||||||
displayed: Optional[bool] = None,
|
displayed: Optional[bool] = None,
|
||||||
checked: Optional[bool] = None,
|
checked: Optional[bool] = None,
|
||||||
selected: Optional[bool] = None,
|
selected: Optional[bool] = None,
|
||||||
@ -195,6 +192,7 @@ class ChromiumFilter(ChromiumFilterOne):
|
|||||||
have_text: Optional[bool] = None) -> ChromiumFilter: ...
|
have_text: Optional[bool] = None) -> ChromiumFilter: ...
|
||||||
|
|
||||||
def search_one(self,
|
def search_one(self,
|
||||||
|
index: int = 1,
|
||||||
displayed: Optional[bool] = None,
|
displayed: Optional[bool] = None,
|
||||||
checked: Optional[bool] = None,
|
checked: Optional[bool] = None,
|
||||||
selected: Optional[bool] = None,
|
selected: Optional[bool] = None,
|
||||||
|
@ -111,8 +111,7 @@ class SessionPage(BasePage):
|
|||||||
timeout: float = None,
|
timeout: float = None,
|
||||||
index: Optional[int] = 1,
|
index: Optional[int] = 1,
|
||||||
relative: bool = True,
|
relative: bool = True,
|
||||||
raise_err: bool = None) \
|
raise_err: bool = None) -> Union[SessionElement, SessionElementsList]: ...
|
||||||
-> Union[SessionElement, SessionElementsList]: ...
|
|
||||||
|
|
||||||
def cookies(self,
|
def cookies(self,
|
||||||
as_dict: bool = False,
|
as_dict: bool = False,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user