selenium ActionChains 缺少执行
Missing perform for selenium ActionChains
当 "action chains" 已定义但未实际应用时,这是一个非常常见且有时难以发现的问题。示例:
# incorrect
ActionChains(driver).move_to_element(some_element).click(some_element)
相对于:
# correct
ActionChains(driver).move_to_element(some_element).click(some_element).perform()
^^^^^^^^^
如果没有 perform()
.
,ActionChains 基本上什么都不做,也不执行任何操作
有没有办法通过静态代码分析尽早发现此类问题?
我也查看了 PyCharm 是否会对此发出警告,但它报告没有发现可疑代码,这是可以理解的,因为没有 perform()
调用它仍然是一个完全有效的 Python.
执行()
perform() 方法执行所有存储的操作。
根据 ActionChains 的实现,perform()
就像 ActionChains Class 中的另一种方法一样 move_to_element()
, click()
等
现在,ActionChains Class 用于自动化低级交互,例如鼠标移动、鼠标按钮操作、按键和上下文菜单交互,这对通过 方法链接 .
执行复杂的操作,例如悬停和拖放
文档清楚地提到,当您调用 ActionChains 对象上的操作方法时生成用户操作,这些操作 存储在队列中 在 ActionChains 对象。最后,当您调用 perform(
) 时,事件将按照它们排队的顺序触发。
所以按照这个逻辑,你指出 ...ActionChains 在没有 perform()
... 和静态代码分析无法尽早发现此类问题。
甚至 IDEs,例如 Eclipse、PyCharm 甚至 Sublime Text3 a proprietary cross-platform source code editor with a Python application programming interface (API) 不会对此发出警告。
例如 Eclipse 不会抱怨丢失 perfrom()
:
但是 Eclipse 会抱怨 Bad Indentation:
这些案例类似于 classic 案例 IDEs 在 expected_conditions 时不抱怨,应该用 元组 它不是一个函数,而是一个 class,它的初始值设定项只需要 1 参数,超出隐式 self:
class element_to_be_clickable(object):
# .....
def __init__(self, locator):
# .....
IDE快照:
当 "action chains" 已定义但未实际应用时,这是一个非常常见且有时难以发现的问题。示例:
# incorrect
ActionChains(driver).move_to_element(some_element).click(some_element)
相对于:
# correct
ActionChains(driver).move_to_element(some_element).click(some_element).perform()
^^^^^^^^^
如果没有 perform()
.
有没有办法通过静态代码分析尽早发现此类问题?
我也查看了 PyCharm 是否会对此发出警告,但它报告没有发现可疑代码,这是可以理解的,因为没有 perform()
调用它仍然是一个完全有效的 Python.
执行()
perform() 方法执行所有存储的操作。
根据 ActionChains 的实现,perform()
就像 ActionChains Class 中的另一种方法一样 move_to_element()
, click()
等
现在,ActionChains Class 用于自动化低级交互,例如鼠标移动、鼠标按钮操作、按键和上下文菜单交互,这对通过 方法链接 .
执行复杂的操作,例如悬停和拖放文档清楚地提到,当您调用 ActionChains 对象上的操作方法时生成用户操作,这些操作 存储在队列中 在 ActionChains 对象。最后,当您调用 perform(
) 时,事件将按照它们排队的顺序触发。
所以按照这个逻辑,你指出 ...ActionChains 在没有 perform()
... 和静态代码分析无法尽早发现此类问题。
甚至 IDEs,例如 Eclipse、PyCharm 甚至 Sublime Text3 a proprietary cross-platform source code editor with a Python application programming interface (API) 不会对此发出警告。
例如 Eclipse 不会抱怨丢失 perfrom()
:
但是 Eclipse 会抱怨 Bad Indentation:
这些案例类似于 classic 案例 IDEs 在 expected_conditions 时不抱怨,应该用 元组 它不是一个函数,而是一个 class,它的初始值设定项只需要 1 参数,超出隐式 self:
class element_to_be_clickable(object):
# .....
def __init__(self, locator):
# .....
IDE快照: