一尘不染

如何获得Selenium Web Driver来等待元素(不仅是元素)可访问?

selenium

我正在为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”命令在控件的可用性之前有所发展。


阅读 265

收藏
2020-06-26

共1个答案

一尘不染

    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”进行过滤。我本来希望使用单一搜索模式,但是您能做什么?

2020-06-26