繁体   English   中英

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

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

我正在测试一个网站,一切都很好,除非页面花费太多时间,然后 selenium 继续搜索该元素。 我试过使用driver.set_page_load_timeout(5)但仍然永远加载。
这是代码:

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()

功能上set_page_load_timeout()工作,应该为你工作:

driver.set_page_load_timeout(2)

您可以在How to set the timeout of 'driver.get' for python selenium 3.8.0? 中找到详细讨论

然而值得一提的是, set_page_load_timeout()仅在达到'document.readyState'等于"complete"后才适用。 也许在这个用例中'document.readyState'等于"complete"是很晚才实现的。


解决方案

作为一种解决方案,而不是使用默认设置为normal的默认pageLoadStrategy ,您可以将pageLoadStrategy设置为eager ie interactive ,如下所示:

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

您可以在How to make Selenium not wait until full page load 中找到详细的讨论,它的脚本很慢?

暂无
暂无

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

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