当前位置: 首页 > 面试题库 >

检查Python Selenium是否存在元素

鲜于德泽
2023-03-14
问题内容

我有一个问题-我正在使用Selenium(firefox)Web驱动程序打开网页,单击一些链接等,然后捕获屏幕截图。

我的脚本可以从CLI正常运行,但是通过cronjob运行时,它并没有通过第一个find_element()测试。我需要添加一些调试,或一些帮助我弄清为什么失败的东西。

基本上,我必须先单击“登录”锚点,然后才能进入登录页面。元素的构造为:

<a class="lnk" rel="nofollow" href="/login.jsp?destination=/secure/Dash.jspa">log in</a>

我正在通过LINK_TEXT方法使用find_element:

login = driver.find_element(By.LINK_TEXT, "log in").click()

我有点Python Noob,所以我在和这种语言作斗争…

A)如何检查链接是否已被python实际拾取?我应该使用try / catch块吗?

B)是否有比LINK_TEXT更好/更可靠的方法来定位DOM元素?例如,在JQuery中,可以使用更具体的选择器$(’a.lnk:contains(log
in)’)。do_something();

我已经解决了主要问题,这只是手指上的麻烦-我用错误的参数调用脚本-简单的错误。

我仍然想要一些有关如何检查元素是否存在的指针。同样,使用隐式/显式Waits的示例/解释,而不是使用糟糕的time.sleep()调用。


问题答案:

A)是的。检查元素是否存在的最简单方法是find_element在内简单调用try/catch

B)是的,出于两个原因,我总是尝试不使用元素文本来标识元素:

  1. 文本更可能被更改;并且
  2. 如果这对您很重要,则您将无法针对本地化版本运行测试。

解决方案之一:

  1. 您可以使用xpath查找具有ID或其他唯一标识符的父元素或祖先元素,然后找到与或相匹配的子代/后代。
  2. 您可以请求链接本身的ID或名称或其他唯一标识符。

对于后续问题,使用try/catch可以知道如何确定元素是否存在,可以在这里找到很好的等待示例:



 类似资料:
  • 问题内容: 我想检查Selenium中是否存在一个元素,如果存在,请将其分配给一个名称。 现在,我有这样的东西: 但是,当不存在值为9的元素时,它将返回错误。有没有一种方法可以检查它是否存在,或者类似的东西? 问题答案: 有几种选择。我推荐这些。 1.创建方法或Web驱动程序扩展。 2.计算元素,如果有1个或更多元素,则获取它。 那你可以检查

  • 问题内容: 我正在尝试通过查找元素 在Python中,selenium并不总是存在。是否有一条快速的线检查它是否存在,并在不存在时显示NULL或FALSE代替错误消息? 问题答案: 您可以按以下方式实现/ 阻止以检查元素是否存在: 或使用其中一种方法进行检查。它应该返回空列表或与传递的选择器匹配的元素列表,但如果没有找到元素,也不例外:

  • 问题内容: 有没有一种方法可以检查jQuery中是否存在事件?我正在使用自定义命名空间事件的插件,并且希望能够检查事件是否绑定到元素。 问题答案: $(‘body’).click(function(){ alert(‘test’ )}) 您可以通过将对象引用(虽然不是jQuery对象)馈送到$.data进行检查,并为第二个参数馈送“事件”,这将返回一个填充有所有事件(例如“点击”)的对象。您可以遍

  • 问题内容: 我有一个看起来像元组的列表: 检查该元组中是否存在值的最佳方法是什么?例如,我想能够说: 并得到真 问题答案: 您正在寻找: 结合一个简单的生成器表达式,就可以完成任务。生成器表达式接受每个元组,如果包含则产生。然后在请求的第一个项目返回时返回(否则为)。因此,这就是您想要的。它也可以很好地读取- 如果有任何元组包含。 如果您要执行大量操作并且需要性能,那么可能值得设置所有值的集合以使

  • 问题内容: 如果该元素是通过方法创建的,如何检查该元素是否存在? 对我不起作用。 问题答案: 对我不起作用。 您需要在元素ID之前添加: 使用香草JavaScript,不需要例如hash(),但是使用jQuery时,确实需要像基于CSS一样将哈希放入目标元素。

  • 问题内容: 我试图在执行此行之前检查元素是否存在: 如果id 在文档中不存在,甚至在-block中,都会引发错误“ no such element” 。我找到了Java的答案,您可以在其中检查大小是否为0,但是在node-js中,这会在我检查大小之前引发错误。 问题答案: 您可以利用的可选错误处理程序参数。 我在文档中找不到明确声明的内容,但是通过模块源代码中的函数定义确定了这一点: