gpt4 book ai didi

python - selenium ActionChains 缺少执行

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:24 28 4
gpt4 key购买 nike

当定义了“ Action 链”但未实际应用时,这是一个非常常见且有时难以发现的问题。示例:

# 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 类中的另一种方法,如 move_to_element()click() 等.

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

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

按照这个逻辑,您指出是非常正确的...如果没有perform()...,ActionChains 基本上什么都不做,也不会执行任何操作静态代码分析无法及早发现此类问题。

甚至是 IDE,例如 EclipsePyCharm 甚至 Sublime Text3一个proprietary cross-platform source code editorPython application programming interface (API) 不会对此发出警告。

例如,Eclipse 不会提示缺少 perfrom():

no_perform

但是 Eclipse 会提示 Bad Indentation:

bad_indentation

这些案例类似于 IDE 在 expected_conditions 时不报错的经典案例它应该用 tuple 调用,它不是一个函数,而是一个类,它的初始化器只需要 1 隐式 self 参数:

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

IDE 快照:

tuple

关于python - selenium ActionChains 缺少执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782016/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com