【问题标题】:Selenium: how to understand which element to send keys to?Selenium:如何理解将密钥发送到哪个元素?
【发布时间】:2020-09-22 14:06:26
【问题描述】:

不断遇到同样的问题:当我使用 Selenium (Python) 时,我经常需要找到要 send_keys() 的元素。例如。在 ebay 前端网页上,需要搜索一些项目。

每次我最终都会围绕我需要的东西(有时使用 ChroPath)来处理所有类/框架,其中一个可以工作。是否有更简单、更系统的方法来查找与搜索选项卡对应的元素以将键发送到?

【问题讨论】:

  • 按名称通常最适合输入字段。例如:对于此处的搜索字段,使用 By.name('q') (对于 python,“find_element_by_name('q')”
  • @pcalkins 抱歉,我不明白。你在搜索什么?
  • 对不起,应该更清楚,这是 StackOverflow 的搜索字段。

标签: python selenium


【解决方案1】:

您可以尝试的一件事是使用hasattr 方法来检查元素是否具有特定属性。来自official documentation关于hasattr

hasattr(object, name) 参数是一个对象和一个字符串。这 如果字符串是对象的名称之一,则结果为 True 属性,否则为 False。 (这是通过调用实现的 getattr(object, name) 并查看它是否引发 AttributeError 与否。)

if hasattr(element, 'send_keys'):
    # do something

【讨论】:

  • 谢谢,我刚刚尝试了一个候选 - 它在 has_attr(element, 'send_keys) 上返回 True,但随后我得到通常的错误:selenium.common.exceptions.ElementNotInteractableException: Message: Element 无法通过键盘访问
  • 嗯,这是一个新的错误,对我来说是进步,在这里看看这个问题。 stackoverflow.com/questions/49864965/…
  • 同样因为答案确实让你在你的问题中前进,你能把它标记为正确吗?
  • 其他讨论的链接非常有用
【解决方案2】:

,您不应该尝试在网页上的随机元素上调用send_keys(),例如ebay 主页

理想情况下,您将与之交互或调用send_keys()WebElements 应该是您的测试的一部分,也应该是测试计划的一部分。

在执行测试时,在适当的粗略过程中,当调用 send_keys() 时,您可能会遇到不同的错误。您必须根据HTML DOM 的普遍情况来解决这些问题。


参考文献

您可以在send_keys() 上找到一些相关讨论:

【讨论】:

  • 谢谢,但我认为等待不是问题。就我而言,有嵌入的 javascript,所以我需要处理它。
  • @LazyCat 我还没有在这个讨论中谈到等待 :) 但是我作为参考提供的示例可能包括等待作为解决方案。关于将密钥发送到哪个元素,我的回答非常笼统
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 2017-05-24
  • 2016-08-05
  • 1970-01-01
相关资源
最近更新 更多