mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
2.4.1
This commit is contained in:
parent
59764e8305
commit
6cc2336408
@ -916,17 +916,12 @@ class Select(object):
|
|||||||
self.inner_ele = ele
|
self.inner_ele = ele
|
||||||
self.select_ele = Select(ele.inner_ele)
|
self.select_ele = Select(ele.inner_ele)
|
||||||
|
|
||||||
def __call__(self,
|
def __call__(self, text_or_index: Union[str, int, list, tuple]) -> bool:
|
||||||
text_value_index: Union[str, int, list, tuple] = None,
|
"""选定下拉列表中子元素 \n
|
||||||
para_type: str = 'text',
|
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
deselect: bool = False) -> bool:
|
:return: None
|
||||||
"""选定或取消选定下拉列表中子元素 \n
|
|
||||||
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
|
||||||
:param deselect: 是否取消选择
|
|
||||||
:return: 是否选择成功
|
|
||||||
"""
|
"""
|
||||||
return self.select(text_value_index, para_type, deselect)
|
return self.select(text_or_index)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_multi(self) -> bool:
|
def is_multi(self) -> bool:
|
||||||
@ -957,10 +952,48 @@ class Select(object):
|
|||||||
"""清除所有已选项"""
|
"""清除所有已选项"""
|
||||||
self.select_ele.deselect_all()
|
self.select_ele.deselect_all()
|
||||||
|
|
||||||
def select(self,
|
def select(self, text_or_index: Union[str, int, list, tuple]) -> bool:
|
||||||
text_value_index: Union[str, int, list, tuple] = None,
|
"""选定下拉列表中子元素 \n
|
||||||
para_type: str = 'text',
|
:param text_or_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
deselect: bool = False) -> bool:
|
:return: 是否选择成功
|
||||||
|
"""
|
||||||
|
i = 'index' if isinstance(text_or_index, int) else 'text'
|
||||||
|
return self._select(text_or_index, i, False)
|
||||||
|
|
||||||
|
def select_by_value(self, value: Union[str, list, tuple]) -> bool:
|
||||||
|
"""此方法用于根据value值选择项。当元素是多选列表时,可以接收list或tuple \n
|
||||||
|
:param value: value属性值,传入list或tuple可选择多项
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
return self._select(value, 'value', False)
|
||||||
|
|
||||||
|
def deselect(self, text_or_index: Union[str, int, list, tuple]) -> bool:
|
||||||
|
"""取消选定下拉列表中子元素 \n
|
||||||
|
:param text_or_index: 根据文本或序号取消择选项,若允许多选,传入list或tuple可取消多项
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
i = 'index' if isinstance(text_or_index, int) else 'text'
|
||||||
|
return self._select(text_or_index, i, True)
|
||||||
|
|
||||||
|
def deselect_by_value(self, value: Union[str, list, tuple]) -> bool:
|
||||||
|
"""此方法用于根据value值取消选择项。当元素是多选列表时,可以接收list或tuple \n
|
||||||
|
:param value: value属性值,传入list或tuple可取消多项
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
return self._select(value, 'value', True)
|
||||||
|
|
||||||
|
def invert(self) -> None:
|
||||||
|
"""反选"""
|
||||||
|
if not self.is_multi:
|
||||||
|
raise NotImplementedError("只能对多项选框执行反选。")
|
||||||
|
|
||||||
|
for i in self.options:
|
||||||
|
i.click(by_js=True)
|
||||||
|
|
||||||
|
def _select(self,
|
||||||
|
text_value_index: Union[str, int, list, tuple] = None,
|
||||||
|
para_type: str = 'text',
|
||||||
|
deselect: bool = False) -> bool:
|
||||||
"""选定或取消选定下拉列表中子元素 \n
|
"""选定或取消选定下拉列表中子元素 \n
|
||||||
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
||||||
@ -995,15 +1028,15 @@ class Select(object):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
elif isinstance(text_value_index, (list, tuple)):
|
elif isinstance(text_value_index, (list, tuple)):
|
||||||
self.select_multi(text_value_index, para_type, deselect)
|
return self._select_multi(text_value_index, para_type, deselect)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise TypeError('只能传入str、int、list和tuple类型。')
|
raise TypeError('只能传入str、int、list和tuple类型。')
|
||||||
|
|
||||||
def select_multi(self,
|
def _select_multi(self,
|
||||||
text_value_index: Union[list, tuple] = None,
|
text_value_index: Union[list, tuple] = None,
|
||||||
para_type: str = 'text',
|
para_type: str = 'text',
|
||||||
deselect: bool = False) -> Union[bool, list]:
|
deselect: bool = False) -> bool:
|
||||||
"""选定或取消选定下拉列表中多个子元素 \n
|
"""选定或取消选定下拉列表中多个子元素 \n
|
||||||
:param text_value_index: 根据文本、值选或序号择选多项
|
:param text_value_index: 根据文本、值选或序号择选多项
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
||||||
@ -1013,47 +1046,19 @@ class Select(object):
|
|||||||
if para_type not in ('text', 'value', 'index'):
|
if para_type not in ('text', 'value', 'index'):
|
||||||
raise ValueError('para_type参数只能传入“text”、“value”或“index”')
|
raise ValueError('para_type参数只能传入“text”、“value”或“index”')
|
||||||
|
|
||||||
if isinstance(text_value_index, (list, tuple)):
|
if not isinstance(text_value_index, (list, tuple)):
|
||||||
fail_list = []
|
|
||||||
for i in text_value_index:
|
|
||||||
if not isinstance(i, (int, str)):
|
|
||||||
raise TypeError('列表只能由str或int组成')
|
|
||||||
|
|
||||||
if not self.select(i, para_type, deselect):
|
|
||||||
fail_list.append(i)
|
|
||||||
|
|
||||||
return fail_list or True
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise TypeError('只能传入list或tuple类型。')
|
raise TypeError('只能传入list或tuple类型。')
|
||||||
|
|
||||||
def deselect(self,
|
success = True
|
||||||
text_value_index: Union[str, int, list, tuple] = None,
|
for i in text_value_index:
|
||||||
para_type: str = 'text') -> bool:
|
if not isinstance(i, (int, str)):
|
||||||
"""取消选定下拉列表中子元素 \n
|
raise TypeError('列表只能由str或int组成')
|
||||||
:param text_value_index: 根据文本、值选或序号择选项,若允许多选,传入list或tuple可多选
|
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
|
||||||
:return: 是否选择成功
|
|
||||||
"""
|
|
||||||
return self.select(text_value_index, para_type, True)
|
|
||||||
|
|
||||||
def deselect_multi(self,
|
p = 'index' if isinstance(i, int) else para_type
|
||||||
text_value_index: Union[list, tuple] = None,
|
if not self._select(i, p, deselect):
|
||||||
para_type: str = 'text') -> Union[bool, list]:
|
success = False
|
||||||
"""取消选定下拉列表中多个子元素 \n
|
|
||||||
:param text_value_index: 根据文本、值选或序号取消择选多项
|
|
||||||
:param para_type: 参数类型,可选 'text'、'value'、'index'
|
|
||||||
:return: 是否选择成功
|
|
||||||
"""
|
|
||||||
return self.select_multi(text_value_index, para_type, True)
|
|
||||||
|
|
||||||
def invert(self) -> None:
|
return success
|
||||||
"""反选"""
|
|
||||||
if not self.is_multi:
|
|
||||||
raise NotImplementedError("只能对多项选框执行反选。")
|
|
||||||
|
|
||||||
for i in self.options:
|
|
||||||
i.click()
|
|
||||||
|
|
||||||
|
|
||||||
class ElementWaiter(object):
|
class ElementWaiter(object):
|
||||||
|
@ -404,14 +404,14 @@ options = ele.select.select.selected_options
|
|||||||
|
|
||||||
### select()
|
### select()
|
||||||
|
|
||||||
该方法用于选定或取消选定下拉列表中子元素。Select 类的`__call__()`方法直接调用这个方法,因此可以直接`ele.select()`来替代这个方法。写法更直观。
|
该方法用于选定下拉列表中子元素。
|
||||||
当元素是多选列表时,可以接受`list`或`tuple`,同时选择多个项。
|
接收`int`类型时根据序号选择,接收`str`类型时根据文本选择。
|
||||||
|
接收`list`或`tuple`时同时选择多个项,多项可序号和文本混排。只能在多选列表使用。
|
||||||
|
Select 类的`__call__()`方法直接调用这个方法,因此可以直接`ele.select()`来替代这个方法。写法更直观。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
- text_value_index:根据文本、值选或序号择选项,若允许多选,传入`list`或`tuple`可多选
|
- text_or_index:根据文本或序号择选项,若允许多选,传入`list`或`tuple`可多选
|
||||||
- para_type:参数类型,可选`'text'`、`'value'`、`'index'`,默认根据文本选择
|
|
||||||
- deselect:是否取消选择
|
|
||||||
|
|
||||||
返回:是否选择成功
|
返回:是否选择成功
|
||||||
|
|
||||||
@ -419,20 +419,35 @@ options = ele.select.select.selected_options
|
|||||||
# 根据文本选择下拉列表项
|
# 根据文本选择下拉列表项
|
||||||
ele.select('text')
|
ele.select('text')
|
||||||
|
|
||||||
# 根据 value 选择下拉列表项
|
# 选择第一个下拉列表项
|
||||||
ele.select(value, 'value')
|
ele.select(0)
|
||||||
|
|
||||||
# 根据序号选择下拉列表项
|
|
||||||
ele.select(index, 'index')
|
|
||||||
|
|
||||||
# 选择多个文本项
|
# 选择多个文本项
|
||||||
ele.select(('text1', 'text2'))
|
ele.select(('text1', 'text2'))
|
||||||
|
|
||||||
# 选择多个 value 项
|
|
||||||
ele.select(('value1', 'value2'), 'value')
|
|
||||||
|
|
||||||
# 选择多个序号
|
# 选择多个序号
|
||||||
ele.select(('index1', 'index2'), 'index')
|
ele.select((0, 2))
|
||||||
|
|
||||||
|
# 文本和序号混合选择
|
||||||
|
ele.select(('text1', 2))
|
||||||
|
```
|
||||||
|
|
||||||
|
### select_by_value()
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
- value:`value`属性值,若允许多选,传入`list`或`tuple`可多选
|
||||||
|
|
||||||
|
返回:是否选择成功
|
||||||
|
|
||||||
|
此方法用于根据`value`值选择项。当元素是多选列表时,可以接受`list`或`tuple`,同时选择多个项,可和序号混排。
|
||||||
|
|
||||||
|
```python
|
||||||
|
# 根据 value 值选择列表项
|
||||||
|
ele.select.select_by_value('value1')
|
||||||
|
|
||||||
|
# 根据 value 值选择多个项
|
||||||
|
ele.select.select_by_value(('value1', 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
### deselect()
|
### deselect()
|
||||||
@ -441,29 +456,43 @@ ele.select(('index1', 'index2'), 'index')
|
|||||||
|
|
||||||
参数:
|
参数:
|
||||||
|
|
||||||
- text_value_index:根据文本、值选或序号择选项,若允许多选,传入`list`或`tuple`可多选
|
- text_or_index:根据文本、值选或序号择选项,若允许多选,传入`list`或`tuple`可多选
|
||||||
- para_type:参数类型,可选` 'text'`、`'value'`、`'index'`
|
|
||||||
|
|
||||||
返回:是否选择成功
|
返回:是否取消选择成功
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# 根据文本取消选择下拉列表项
|
# 根据文本取消选择下拉列表项
|
||||||
ele.select.deselect('text')
|
ele.select.deselect('text')
|
||||||
|
|
||||||
# 根据 value 取消选择下拉列表项
|
# 取消选择第一项
|
||||||
ele.select.deselect(value, 'value')
|
ele.select.deselect(0)
|
||||||
|
|
||||||
# 根据序号取消选择下拉列表项
|
|
||||||
ele.select.deselect(index, 'index')
|
|
||||||
|
|
||||||
# 取消选择多个文本项
|
# 取消选择多个文本项
|
||||||
ele.select.deselect(('text1', 'text2'))
|
ele.select.deselect(('text1', 'text2'))
|
||||||
|
|
||||||
# 取消选择多个 value 项
|
|
||||||
ele.select.deselect(('value1', 'value2'), 'value')
|
|
||||||
|
|
||||||
# 取消选择多个序号
|
# 取消选择多个序号
|
||||||
ele.select.deselect(('index1', 'index2'), 'index')
|
ele.select.deselect((0, 1))
|
||||||
|
|
||||||
|
# 文本和序号混合取消选择
|
||||||
|
ele.select.deselect(('text1', 2))
|
||||||
|
```
|
||||||
|
|
||||||
|
### deselect_by_value()
|
||||||
|
|
||||||
|
此方法用于根据`value`值取消选择项。当元素是多选列表时,可以接受`list`或`tuple`,同时取消选择多个项,可和序号混排。
|
||||||
|
|
||||||
|
参数:
|
||||||
|
|
||||||
|
- value:`value`属性值,若允许多选,传入`list`或`tuple`可取消多项
|
||||||
|
|
||||||
|
返回:是否取消选择成功
|
||||||
|
|
||||||
|
```python
|
||||||
|
# 根据 value 值取消选择列表项
|
||||||
|
ele.select.deselect_by_value('value1')
|
||||||
|
|
||||||
|
# 根据 value 值取消选择多个项
|
||||||
|
ele.select.deselect_by_value(('value1', 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
## 多项列表独有功能
|
## 多项列表独有功能
|
||||||
@ -480,7 +509,7 @@ ele.select.deselect(('index1', 'index2'), 'index')
|
|||||||
ele.select.clear()
|
ele.select.clear()
|
||||||
```
|
```
|
||||||
|
|
||||||
### invert
|
### invert()
|
||||||
|
|
||||||
此方法用于反选多选列表选项。
|
此方法用于反选多选列表选项。
|
||||||
|
|
||||||
|
2
setup.py
2
setup.py
@ -6,7 +6,7 @@ with open("README.md", "r", encoding='utf-8') as fh:
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="DrissionPage",
|
name="DrissionPage",
|
||||||
version="2.4.0",
|
version="2.4.1",
|
||||||
author="g1879",
|
author="g1879",
|
||||||
author_email="g1879@qq.com",
|
author_email="g1879@qq.com",
|
||||||
description="A module that integrates selenium and requests session, encapsulates common page operations.",
|
description="A module that integrates selenium and requests session, encapsulates common page operations.",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user