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.

还有这个missing-perform ESLint rule.

执行()

perform() 方法执行所有存储的操作。

根据 ActionChains 的实现,perform() 就像 ActionChains Class 中的另一种方法一样 move_to_element() , click()

现在,ActionChains Class 用于自动化低级交互,例如鼠标移动、鼠标按钮操作、按键和上下文菜单交互,这对通过 方法链接 .

执行复杂的操作,例如悬停和拖放

文档清楚地提到,当您调用 ActionChains 对象上的操作方法时生成用户操作,这些操作 存储在队列中 ActionChains 对象。最后,当您调用 perform() 时,事件将按照它们排队的顺序触发。

所以按照这个逻辑,你指出 ...ActionChains 在没有 perform()... 和静态代码分析无法尽早发现此类问题。

甚至 IDEs,例如 EclipsePyCharm 甚至 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快照: