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

我如何才能让Selenium Web驱动程序等待元素的访问,而不仅仅是出现?

端木渝
2023-03-14
问题内容

我正在为Web应用程序编写测试。某些命令会弹出对话框,这些对话框具有可见的控件,但有一段时间无法使用。(它们显示为灰色,但Webdriver仍将其视为可见)。

我如何告诉Selenium等待该元素实际上是可访问的,而不仅仅是可见的?

    try:
        print "about to look for element"
        element = WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_id("createFolderCreateBtn"))
        print "still looking?"
    finally: print 'yowp'

这是我尝试过的代码,但是它在可用之前会“看到”按钮,并且基本上会在所谓的“等待”之后立即收费。

请注意,我可以在代码中填充十秒钟的睡眠时间,而不是这样,代码可以正常工作,但这是丑陋的,不可靠的,效率低下的。但这确实证明了问题仅在于“
click”命令在控件的可用性之前有所发展。


问题答案:
    print time.time()
    try:
        print "about to look for element"
        def find(driver):
            e = driver.find_element_by_id("createFolderCreateBtn")
            if (e.get_attribute("disabled")=='true'):
                return False
            return e
        element = WebDriverWait(driver, 10).until(find)
        print "still looking?"
    finally: print 'yowp'
    print "ok, left the loop"
    print time.time()

这就是我们最终得到的结果。(感谢lukeis和RossPatterson。)请注意,我们必须按id查找所有项,然后按“
disabled”进行过滤。我本来希望使用单一搜索模式,但是您能做什么?



 类似资料:
  • 问题内容: 我正在为Web应用程序编写测试。某些命令会弹出对话框,这些对话框具有可见的控件,但有一段时间无法使用。(它们显示为灰色,但Webdriver仍将其视为可见)。 我如何告诉Selenium等待该元素实际可访问,而不仅仅是可见? 这是我尝试过的代码,但是它在可用之前会“看到”按钮,并且基本上会在假定的“等待”之后立即充电。 请注意,我可以在代码中填充十秒钟的睡眠时间,而不是这样,代码可以正

  • 下面是我为firefox浏览器初始化的selenium web驱动程序。 尽管我给出了隐式等待,但我没有等待元素。它会立即抛出not found异常。如果我放那么它工作正常,没有任何问题。但是把现在测试用例包含更多线程的任何地方。sleep比实际的测试用例代码低。有人能给我建议正确的方法吗?

  • 我想我还没有完全理解Spark是如何工作的。 这背后的原因是我想优化数据的局部性--当在集群上运行我的Spark应用程序时,每个工作人员只需要与其本地的Cassandra节点进行对话。 现在,当通过从机器1(Spark Master)运行将Spark应用程序提交到集群时,我预计会出现以下情况: 在Spark主程序上启动驱动程序实例 驾驶员在每个火花工人上启动一个执行器 驱动程序将我的应用程序分发给

  • 我正在尝试使用java(JDA)设置discord bot,但在服务器上使用它时遇到了一些问题。它适用于直接消息,但由于某些原因,它不能在服务器上使用。我通过intellij将该项目设置为Maven项目。 我是从一个 这在DM中运行良好,但在服务器中不起作用。 以下是我迄今为止所尝试的: 1. 我把它从收到的消息改为: 这在我的服务器上仍然不起作用,在dms中也不起作用。 2.我更改了bot的权限

  • 问题内容: 单击特定按钮时-我的测试站点将打开模式窗口。 但是模式窗口的打开是不同的 两者都有不同的标题,不同的选项和不同的位置。现在我应该等到模态。 是否可以等到任一模态窗口(WebElement)可见? 我已经在WebDriverWait方法中进行搜索,但是所有方法都必须等到特定WebElement可见或可单击为止。 我找不到更好的方法来等到任何一个都可见。 您能提出一种解决这种情况的方法吗?

  • 问题内容: 单击特定按钮时-我的测试站点将打开模式窗口。 但是模式窗口的打开是不同的 两者都有不同的标题,不同的选项和不同的位置。现在我应该等到模态。 是否可以等到任一模态窗口(WebElement)可见? 我已经在WebDriverWait方法中进行搜索,但是所有方法都必须等到特定的WebElement可见或可单击为止。 我找不到更好的方法来等到任何一个都可见。 您能提出一种解决这种情况的方法吗