【问题标题】:How can I highlight element on a webpage using Selenium-Python?如何使用 Selenium-Python 突出显示网页上的元素?
【发布时间】:2023-03-21 00:32:02
【问题描述】:

我已经收到了一个现有的 selenium 框架,它使用 python 编写脚本。出于调试(和其他)目的,我想突出显示当前正在对其执行操作的元素(输入框、链接、下拉列表等)

虽然我可以找到定义函数并在需要突出显示元素的任何地方调用函数的解决方案(如下面给出的示例),但我需要的是框架级别的解决方案。

  1. Selenium webdriver highlight element before clicking
  2. https://seleniumwithjavapython.wordpress.com/selenium-with-python/intermediate-topics/playing-with-javascript-and-javascript-executor/highlighting-a-web-element-on-webpage/

是否可以在 Python(或任何其他可以与 python 脚本集成的语言)中实现框架/脚本级别的任何解决方案,这样我就不必显式调用函数。

附:我刚开始使用 Python,如果它简单/直截了当,请原谅。如果有人可以向我指出任何现有的解决方案或可以提供他们自己的解决方案,将不胜感激。

【问题讨论】:

  • 我不明白需要突出显示该元素以进行调试。日志应该足以理解什么时候出错了。 santosh 提供的解决方案也会减慢您的执行速度。 (0.3 倍的元素数量)
  • 我理解,但正如我所说,我是 Python 的新手(到目前为止只做了很少的编程),所以突出显示元素使我更容易调试故障点。我同意,几个月后我会习惯于使用日志进行调试,但现在我只能感谢任何解决我的问题的方法。
  • 对此没有简单的解决方案。要么为要突出显示元素的每个动作编写包装器,要么在执行任何动作之前在测试中手动调用此方法。无论哪种方式都是昂贵的,当你必须禁用它时也会很昂贵。
  • 感谢@GaurangShah

标签: javascript python selenium automation


【解决方案1】:

我没有尝试过这段代码,但这应该可以。

import time

def highlight(element):
 """Highlights (blinks) a Selenium Webdriver element"""
  driver = element._parent
  def apply_style(s):
     driver.execute_script("arguments[0].setAttribute('style', arguments[1]);",element, s)
  original_style = element.get_attribute('style')
  apply_style("background: yellow; border: 2px solid red;")
  time.sleep(.3)
  apply_style(original_style)

希望这会有所帮助。谢谢。

来源 - https://gist.github.com/dariodiaz/3104601

【讨论】:

  • 据我了解,这个函数仍然需要为每个元素调用,并且不会在类/框架级别实现。如果我错了,请纠正我。
  • 将此作为单独的 py 文件写入,然后将其导入您的实际类文件。在需要时使用它。您是否需要默认突出显示每个元素的元素?
  • 是的..这就是我想做的。突出显示执行自动化脚本时作用的每个 Web 元素。
  • 在这种情况下,我们可以创建一个包装器 def 并继续。假设我们需要单击一个元素,将元素传递给另一个方法,该方法首先突出显示该元素,然后执行实际的 selenium 单击。每个动作都有一个单独的定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2020-01-27
  • 1970-01-01
  • 2019-07-24
相关资源
最近更新 更多