在执行期间检查WebDriver测试中的加载时间

时间:2018-09-27 09:03:49

标签: java selenium selenium-webdriver

我使用Selenium WebDriver 3.14并在Chrome浏览器中执行测试。我需要在执行时间中测量页面的响应时间,以检查它是否在预定义值以下。如果它大于此值,则应执行一些其他操作。因此,我需要的解决方案不同于System.currentTimeMillis(),因为此值的检查应在后台自动进行。这是一个类似于AJAX的窗口,因此当加载时间太长时,应使用脚本将其关闭。窗口示例:

example window

4 个答案:

答案 0 :(得分:6)

典型的解决方案是尝试/捕获等待。例如。如果下一步是单击加载完成后显示的按钮:

function myFunction() {
    document.a.style.color = "black";
}

但是,如果在Selenium中使用隐式超时,则会出现一个常见问题。这不太好用,特别是在隐式超时时间长于LOADING_TIMEOUT的情况下,因为这会减慢 WebDriverWait wait = new WebDriverWait(driver, LOADING_TIMEOUT); WebElement webElement; try { webElement = wait.until(elementToBeClickable(By.id(id))); } catch (TimeoutException ex) { // Close loading window return; } webElement.click(); 中的轮询周期。

在这种情况下,最简单的解决方案是暂时减少隐式超时:

wait.until()

答案 1 :(得分:2)

如果我的理解正确,您可以将selenium.waitForPageToLoad("100000");中的时间减少到所需的预定义值,例如20秒。因此,如果您希望在20秒内未加载页面就停止加载,请尝试执行以下操作:

long start = System.currentTimeMillis();    
try {
      selenium.waitForPageToLoad("20000");
      System.out.println("The page load is too long!");
} catch {
      long timeToLoad= (System.currentTimeMillis()-start);
      System.out.println("The page loaded in " +timeToLoad+ " seconds.");
}

答案 2 :(得分:2)

您应该尝试通过功能CapabilityType.LOGGING_PREFSLogging Preferences设置performance-log

例如:

LoggingPreferences logs = new LoggingPreferences(); 
logs .enable(LogType.PERFORMANCE, Level.ALL);
caps.setCapability(CapabilityType.LOGGING_PREFS, logs); 

您将获得如下的性能日志条目。

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
    System.out.println(entry.toString());
    //do the needful
}

答案 3 :(得分:0)

我认为您是在寻找API测试而不是自动化测试。

Postman API Testing Setup and Usage Tutorial

希望这会有所帮助

编辑:

或者,一种更轻量级的API测试解决方案:

Online API tester