ChromiumFrame的wait增加元素特征;WebPage切换d模式时能正确读取session的url;quit()后等待浏览器完全关闭

This commit is contained in:
g1879 2023-03-26 23:51:50 +08:00
parent 91624d3458
commit 7a34e4d5f6
5 changed files with 41 additions and 26 deletions

View File

@ -8,8 +8,8 @@ from time import sleep, perf_counter
from warnings import warn
from .commons.tools import get_usable_path
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter
from .chromium_element import ChromiumElement
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter, ChromiumBaseWaiter
from .chromium_element import ChromiumElement, ChromiumElementWaiter
class ChromiumFrame(ChromiumBase):
@ -292,9 +292,14 @@ class ChromiumFrame(ChromiumBase):
@property
def states(self):
"""返回用于获取状态信息的对象"""
if self._states is None:
self._states = ChromiumFrameStates(self)
return self._states
return self.frame_ele.states
@property
def wait(self):
"""返回用于等待的对象"""
if self._wait is None:
self._wait = FrameWaiter(self)
return self._wait
def refresh(self):
"""刷新frame页面"""
@ -634,16 +639,6 @@ class ChromiumFrameIds(object):
return self._frame.frame_ele.ids.node_id
class ChromiumFrameStates(object):
def __init__(self, frame):
self._frame = frame
def is_displayed(self):
"""返回frame元素是否显示"""
self._frame._check_ok()
return self._frame.frame_ele.states.is_displayed
class ChromiumFrameScroll(ChromiumPageScroll):
def __init__(self, frame):
"""
@ -672,3 +667,12 @@ class ChromiumFrameSetter(ChromiumBaseSetter):
"""
self._page._check_ok()
self._page.frame_ele.set.attr(attr, value)
class FrameWaiter(ChromiumBaseWaiter, ChromiumElementWaiter):
def __init__(self, frame):
"""
:param frame: ChromiumFrame对象
"""
super().__init__(frame)
super(ChromiumBaseWaiter, self).__init__(frame, frame.frame_ele)

View File

@ -6,8 +6,8 @@
from pathlib import Path
from typing import Union, Tuple, List, Any
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter
from .chromium_element import ChromiumElement, Locations
from .chromium_base import ChromiumBase, ChromiumPageScroll, ChromiumBaseSetter, ChromiumBaseWaiter
from .chromium_element import ChromiumElement, Locations, ChromiumElementStates, ChromiumElementWaiter
class ChromiumFrame(ChromiumBase):
@ -21,9 +21,8 @@ class ChromiumFrame(ChromiumBase):
self._doc_ele: ChromiumElement = ...
self._is_diff_domain: bool = ...
self.doc_ele: ChromiumElement = ...
self._states: ChromiumFrameStates = ...
self._states: ChromiumElementStates = ...
self._ids: ChromiumFrameIds = ...
# self.is_loading: bool = ...
def __call__(self,
loc_or_str: Union[Tuple[str, str], str],
@ -103,7 +102,10 @@ class ChromiumFrame(ChromiumBase):
def set(self) -> ChromiumFrameSetter: ...
@property
def states(self) -> ChromiumFrameStates: ...
def states(self) -> ChromiumElementStates: ...
@property
def wait(self) -> FrameWaiter: ...
def refresh(self) -> None: ...
@ -205,8 +207,5 @@ class ChromiumFrameSetter(ChromiumBaseSetter):
def attr(self, attr: str, value: str) -> None: ...
class ChromiumFrameStates(object):
def __init__(self, frame: ChromiumFrame):
self._frame: ChromiumFrame = ...
def is_displayed(self) -> bool: ...
class FrameWaiter(ChromiumBaseWaiter, ChromiumElementWaiter):
def __init__(self, frame: ChromiumFrame): ...

View File

@ -11,6 +11,7 @@ from warnings import warn
from requests import Session
from .commons.tools import port_is_using
from .chromium_base import ChromiumBase, Timeout, ChromiumBaseSetter, ChromiumBaseWaiter
from .chromium_driver import ChromiumDriver
from .chromium_tab import ChromiumTab
@ -335,6 +336,9 @@ class ChromiumPage(ChromiumBase):
"""关闭浏览器"""
self._tab_obj.Browser.close()
self._tab_obj.stop()
ip, port = self.address.split(':')
while port_is_using(ip, port):
sleep(.1)
def _on_alert_close(self, **kwargs):
"""alert关闭时触发的方法"""

View File

@ -81,6 +81,11 @@ class SessionPage(BasePage):
"""返回当前访问url"""
return self._url
@property
def _session_url(self):
"""返回当前访问url"""
return self._url
@property
def html(self):
"""返回页面的html文本"""
@ -191,7 +196,7 @@ class SessionPage(BasePage):
cookies = self.session.cookies
else:
if self.url:
ex_url = extract(self.url)
ex_url = extract(self._session_url)
domain = f'{ex_url.domain}.{ex_url.suffix}' if ex_url.suffix else ex_url.domain
cookies = tuple(x for x in self.session.cookies if domain in x.domain or x.domain == '')

View File

@ -54,6 +54,9 @@ class SessionPage(BasePage):
@property
def url(self) -> str: ...
@property
def _session_url(self) -> str: ...
@property
def html(self) -> str: ...