在构建浏览器自动化项目时,可以通过chrome debug 模式链接chrome 浏览器,可以完成独立动作的测试和构建,不再需每次从头开始测试。
使用:
启动浏览器
-
chrome.exe --remote-debugging-port=9222 --user-data-dir=D:\a --disable-extensions
selenium 链接到浏览器
-
chrome_options.add_experimental_option( "debuggerAddress", f"127.0.0.1:{port}" ) driver = webdriver.Chrome(options=chrome_options)
提示:
测试过程中会生成大量 chromedriver 进程不被关闭,记得及时清理(上百次测试也不占啥资源)
总结:
1、selenium 可以封装大量的等待函数,例如等待元素出现和元素可交互等。但是selenium 任然非常不稳定。可以考虑其他自动化库或者基于selenium 的封装库
2、可以封装基于xpath 的文本查找
class TextMatch:
def __init__(self, text: Union[str, Self, Iterable[Union[str, Self]]], contains: bool = False,
tag: Optional[str] = "*"):
self.contains = contains
self.tag = tag
if isinstance(text, TextMatch):
self.text = text.text
self.contains = text.contains
self.tag = tag
else:
self.text = text
def __str__(self):
if isinstance(self.text, str):
express = f"//{self.tag}[contains(text(), '{self.text}')]" if self.contains else f"//{self.tag}[text()='{self.text}']"
return express
elif isinstance(self.text, Iterable):
values = []
for item in self.text:
if isinstance(item, str):
contains = self.contains
text = item
else:
contains = item.contains
text = item.text
self.tag = item.tag
value = f"contains(text(), '{text}')" if contains else f"text()='{text}'"
values.append(value)
express = "//{}[{}]".format(
self.tag, " or ".join(values)
)
return express
print(self.text)
def selenium_locator(self) -> Tuple[str, str]:
return By.XPATH, str(self)
3、元素查找过程中可以通过共同父级元素进行定位。