站点访问出现白屏
- 浏览器的版本与自动化所需的驱动(如 chromedriver)是否一致
当版本一致时,可以在自动访问站点后,调用一次“刷新”方法
refresh()
找元素报错,但在控制台却正常
-
当元素在界面不可见时
def scroll_to_target(self, web_element):
"""用于浏览器内滚动元素到可视窗口以定位元素"""
try:
(self.driver.execute_script("arguments[0].scrollIntoView();", web_element))
time.sleep(1)
except:
raise
获取当前页签的 URL
# 通过 debug 查看具体的属性
instance_webdriver.switch_to.active_element.parent.current_url
当出现错误 Message: element not interactable
原因很多,包括但不限于元素漂移、重绘、hover等
人工检查代码执行时,测试对象的交互表现,可以解决的方式包括 增加适当的休眠函数(比如以此等待界面瞬时的重绘完成)
- 以某种方式(如
move_to_element
)确定对象可见 -
canvas的处理
以及offset()方法的缺陷
canvas 是位图,并不提供任何已经绘制在上面的对象的信息。所以只能通过 JS 或者模拟鼠标在屏幕上的坐标操作等实现画图,通过坐标系操作时,计算机不能有多屏接入。见https://www.w3school.com.cn/jsref/dom_obj_canvas.asp
坐标系操作的缺陷
# GitHub Issue
# https://github.com/SeleniumHQ/selenium/issues/10617
# https://github.com/webdriverio/webdriverio/issues/6596
# https://github.com/w3c/webdriver/issues/1488
# https://github.com/SeleniumHQ/selenium/issues/8003
```python
def get_node_right_panel(browser, x_offset=320, y_offset=320):
_cv = browser.find_element(By.XPATH, “//canvas”)
browser.move_by_offset(x_offset, y_offset)
_cv.click()
try:
assert browser.find_element(DesignDom.ACTFLOW_RIGHT_PANEL[0], DesignDom.ACTFLOW_RIGHT_PANEL[1]), “动作流页右侧面板打开了”
except Exception:
raise Exception(“画布上的对应坐标系没有对象”)
def add_link_on_canvas(browser, src_xoffset: int | float, src_yoffset: int | float, dst_xoffset: int | float, dst_yoffset: int | float): “””
:param browser:
:param src_xoffset:
:param src_yoffset:
:param dst_xoffset:
:param dst_yoffset:
:return:
"""
_cv = browser.find_element(By.XPATH, "//canvas")
browser.move_by_offset(src_xoffset, src_yoffset)
browser.click_and_hold(_cv)
browser.drag_and_drop_by_offset(_cv, dst_xoffset, dst_yoffset)
browser.reset_actions()
canvas 业务自动化问题的解决方案
- 开发侧提供 hook,挂载到 window 对象;再由自动化代码调用 js 以访问相应的 hook API
键盘输入的问题
- 当输入有重叠、截断等不符合预期的异常:先 clear(),再 send_keys()
- 输入值后需要通过回车键触发的,形如
send_keys(('str_value', Keys.ENTER))
。具体可查阅相关 API
选中(点击)对象后不符合预期
- 确定是否可见可交互(Interacable)
- 观察自动化运行时的对象表现,是否测试对象或页面有瞬间的重绘现象。可以合理的调用点击频次