让Selenium暂停X秒

我想要完成的是浏览页面,等待加载某些内容然后获取并保存屏幕截图。

我已经拥有的代码是

WebDriver driver = new FirefoxDriver(); driver.get("http://www.site.com"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); try { File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File("/home/Desktop/image.png")); } catch (Exception e) { e.printStackTrace(); } driver.close(); 

我需要等待的原因,即使页面被加载是因为它将被加载,但在网站上我想要在几秒钟后拍摄加载图片的内容。 由于某种原因页面没有等待, 是否有另一种方法可以让驱动程序/页面等待X秒?

您可以找到在初始页面加载后加载的元素,然后使Selenium等到找到该元素。

 WebDriverWait wait = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ID"))); 

那不是真正的selenium特定事物。 您只是希望java在加载页面后但在拍摄屏幕截图之前暂停一下。

 Thread.sleep(4000); 

把它放在你的driver.get语句之后。

为了防止有人帮助你,你应该尽量避免隐式等待,特别是Thread#sleep尽可能多。 如果您执行Thread.sleep(10) ,即使您的页面在1秒后就绪,您的代码也将始终等待10秒。 因此,如果您经常使用它,这可能会大大减慢您的测试速度

更好的方法是使用ExplicitWaits ,这意味着只要某些操作发生或某些元素在页面上呈现,您就会等待。 所以在你的情况下,我会使用显式等待检查是否所有内容都加载,然后截取屏幕截图。

如果你想延迟一定的秒数,而不是尽快响应,这里有一个类似于selenium IDE提供的暂停function:

 public void pause(Integer milliseconds){ try { TimeUnit.MILLISECONDS.sleep(milliseconds); } catch (InterruptedException e) { e.printStackTrace(); } } 

资源