简体   繁体   English

如何停止测试页面是否在 selenium python 中加载时间过长

[英]How to stop test if page taking too long to load in selenium python

I'm testing a website and all is good with me except when the page is taking too much time then selenium keeps on searching for the element.我正在测试一个网站,一切都很好,除非页面花费太多时间,然后 selenium 继续搜索该元素。 I've tried to use driver.set_page_load_timeout(5) but still keeps on loading forever.我试过使用driver.set_page_load_timeout(5)但仍然永远加载。
Here is the code:这是代码:

from selenium import webdriver
from selenium.common.exceptions import *
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time, os,re, datetime
import logging




class SanityTest():

def login_test(self):
    driver_location = 'C:\\chromedriver.exe'
    os.environ["webdriver.chrome.driver"] = driver_location
    driver = webdriver.Chrome(driver_location)
    driver.maximize_window()
    driver.implicitly_wait(0)
    baseURL = driver.get("https://www.example.com/")
    logging.basicConfig( format = '%(asctime)s: %(levelname)s: %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p'
                        ,level=logging.INFO)
    driver.set_page_load_timeout(2)

    #Is Platform is reachable?:-
    try:
        if WebDriverWait(driver, 1).until(
                EC.visibility_of_element_located((By.XPATH, "//button[contains(@class,'button')]"))):
            logging.info("Success")
    except:
        pass

    try:
        if WebDriverWait(driver, 1).until(
                EC.visibility_of_element_located((By.XPATH, '//span[@jsselect="heading" and @jsvalues=".innerHTML:msg"]'))):

            logging.error('Failure: Unable to reach platform! ==> ' + str(driver.find_element_by_xpath('//span[@jsselect="heading" and @jsvalues=".innerHTML:msg"]').text))
            return
    except :
        print("Page is taking too long to load")
        return



 ff = SanityTest()
 ff.login_test()

Functionally set_page_load_timeout() works and should have worked for you:功能上set_page_load_timeout()工作,应该为你工作:

driver.set_page_load_timeout(2)

You can find a detailed discussion in How to set the timeout of 'driver.get' for python selenium 3.8.0?您可以在How to set the timeout of 'driver.get' for python selenium 3.8.0? 中找到详细讨论

However it is worth to mention that set_page_load_timeout() is applicable only after 'document.readyState' is equal to "complete" is achieved.然而值得一提的是, set_page_load_timeout()仅在达到'document.readyState'等于"complete"后才适用。 Perhaps in this usecase 'document.readyState' equals to "complete" is achieved pretty late.也许在这个用例中'document.readyState'等于"complete"是很晚才实现的。


Solution解决方案

As a solution instead of using the default pageLoadStrategy which is by default set to normal , you can set pageLoadStrategy as eager ie interactive as follows:作为一种解决方案,而不是使用默认设置为normal的默认pageLoadStrategy ,您可以将pageLoadStrategy设置为eager ie interactive ,如下所示:

caps["pageLoadStrategy"] = "eager"  #  interactive

You can find a detailed discussion in How to make Selenium not wait till full page load, which has a slow script?您可以在How to make Selenium not wait until full page load 中找到详细的讨论,它的脚本很慢?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM