代码之家  ›  专栏  ›  技术社区  ›  alecxe

缺少selenium ActionChains的perform

  •  1
  • alecxe  · 技术社区  · 6 年前

    当定义了“行动链”但没有实际应用时,这是一个非常常见的问题,有时很难发现。例子:

    # incorrect
    ActionChains(driver).move_to_element(some_element).click(some_element)
    

    而不是:

    # correct
    ActionChains(driver).move_to_element(some_element).click(some_element).perform()
                                                                           ^^^^^^^^^
    

    ActionChains基本上不会做任何事情,也不会在没有 perform() .

    有没有办法通过静态代码分析及早发现此类问题?


    我还查看了PyCharm是否会对此发出警告,但它没有报告发现可疑代码,这是可以理解的,因为没有 表演 它仍然是一个完全有效的Python。

    还有这个 missing-perform ESLint rule .

    1 回复  |  直到 6 年前
        1
  •  2
  •   undetected Selenium    6 年前

    表演

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

    根据 ActionChains , perform() 就像另一种来自 行动链 move_to_element() , click()

    现在 行动链 类用于自动化低级交互,例如鼠标移动、鼠标按钮操作、按键和上下文菜单交互,这些交互对于执行复杂操作(如悬停和拖放)非常有用 方法链 .

    文档中明确提到,要在调用ActionChains对象上的操作方法时生成用户操作,操作是 存储在队列中 行动链 对象最后,当你打电话的时候 perform( ),事件将按其排队的顺序触发。

    按照这个逻辑,你说得很对 ...ActionChains基本上不会做任何事情,也不会在没有 表演 ... 静态代码分析无法及早发现此类问题。

    例如,即使是IDE 日食 , 皮查姆 甚至 Sublime Text3 A. proprietary cross-platform source code editor 用一个 Python application programming interface (API)不会就此发出警告。

    举个例子 日食 不会抱怨失踪的人 perfrom() :

    no_perform

    但是 日食 会抱怨 不良压痕 :

    bad_indentation

    这些案例类似于IDE不抱怨的经典案例 expected_conditions 应该用一个 元组 它不是一个函数,而是一个类,它的初始值设定项只需要 1. 超越含蓄的争论 自己 :

    class element_to_be_clickable(object):
        # .....
        def __init__(self, locator):
            # .....
    

    IDE快照:

    tuple