Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待加载循环消失的等待函数selenium、unittest、python采用12+;秒,即使循环已完成加载_Python_Selenium_Unit Testing_Django Unittest - Fatal编程技术网

等待加载循环消失的等待函数selenium、unittest、python采用12+;秒,即使循环已完成加载

等待加载循环消失的等待函数selenium、unittest、python采用12+;秒,即使循环已完成加载,python,selenium,unit-testing,django-unittest,Python,Selenium,Unit Testing,Django Unittest,给定等待加载循环从网页中消失的代码: def wait_loadingCircle(self): try: while self.browser.find_element_by_xpath('//div[@class="sk-circle-container"]').is_displayed() is True: time.sleep(1) except (NoSuchElementException, Sta

给定等待加载循环从网页中消失的代码:

    def wait_loadingCircle(self):

    try:
        while self.browser.find_element_by_xpath('//div[@class="sk-circle-container"]').is_displayed() is True:
            time.sleep(1)
    except (NoSuchElementException, StaleElementReferenceException, TimeoutException):
        print('Loading circle has expired')
问题是当圆圈消失时(xpath消失)。如果函数在12秒以上返回false,是否有其他方法等待圆圈消失(xpath不再出现在页面上)

编辑:

此代码示例需要更长的时间:


基本上,当xpath从页面中消失后,当页面的复杂度稍大时,代码识别它的速度会很慢

是的,您可以使用
WebDriverWait
()并使用所处元素的预期条件
不可见性()

一旦元素在20秒内变为不可见(正如您提到的,消失需要12秒),如果元素仍然没有消失,这将移动到下一个语句,否则在20秒后抛出异常

WebDriverWait(driver,20).until(EC.invisibility_of_element_located((By.XPATH,'//div[@class="sk-circle-container"]')))
您需要导入以下库

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

你需要专注于你的用例,等待加载循环从网页上消失,这不是你的用例

您的用例可能是等待初始加载循环从网页中消失,然后与元素交互。在这种情况下,首先需要对装入器的
元素的不可见性进行归纳()
,然后对所需的
元素进行归纳,使其可点击()
,如下所示:

WebDriverWait(driver, 20).until(EC.invisibility_of_element_located((By.XPATH, "//div[@class='sk-circle-container']")))
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "xpath_desired_element"))).click()
注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

更新 方法
wait\u loadingCircle(self)
似乎是完全的开销,因为等待加载循环不是您的实际用例。我们在几次讨论中讨论了这一方面。与其说探测
是显示的(),不如说诱导是最好的方法。您可以在以下内容中找到一些相关讨论:


参考文献 有关详细讨论,请参见:


是的,我尝试过你的解决方案,结果是一样的,如果页面有点大,那么在圆圈从页面上消失后,抛出异常需要很多时间,基本上我希望圆圈一消失就抛出异常,尽快possible@Henry-G:您是否为元素尝试了正确的xpath?预期条件将检查元素visible false。正如您所说,在圆圈实际从页面中消失后,需要很长时间才能抛出异常。这意味着您正在检查的元素消失,它仍然在页面上,因为如果相同的元素消失它将移动到下一个语句不抛出异常。请检查元素或共享url进行调查?不幸的是,它是本地主机,但xpath消失了,它不会仅在屏幕上消失,它也从页面的struct@Henry-G:您可以检查一下xpath,使用chrome开发工具在DOM上获得了多少元素吗?或者通过代码
print(len(driver.find_elements_by_xpath('//div[@class=“sk circle container”]))
是的,基本上,这就是我要做的,但我使用的不是ec.invisibility_of_element_,而是while is_dispalyed()true,因为它更快,我的问题是进入下一步所需的时间,在圆实际消失后单击元素。这是我的问题,即使圆圈消失了,代码也要花很多时间才能看到它的存在gone@Henry-检查答案更新,让我知道你的想法。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC