2013-11-15 50 views
9

我试图做到的是浏览到一个页面,等待着什么加载,然后取并保存截图。获取硒暂停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秒的时间?

+0

检查这个帖子:http://stackoverflow.com/questions/5868439/wait-for-page-load-in-selenium – Gayathri

回答

6

你可以找到一个元素的初始页面加载后加载,然后进行硒等待,直到元素被发现。

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

只需要提一下,在这种方法中,ExpectedCondition每500ms进行一次测试,以查看条件是否满足(此处“ID”元素可见),直到超时(此处设置为10)。对于自定义谓词,也可以编写自己的条件。有关这方面的文档,请访问:http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp – anotherdave

5

这难道不真的是硒具体的事情。你只是想让java在加载页面之后但在截取屏幕之前休眠一下。

Thread.sleep(4000); 

把这个放在你的driver.get语句后面。

+2

我不upvoting唯一原因是因为你应该** **从未使用.....显式等待这样。坏。 – sircapsalot

+0

因此,如果他在1000套套件中的每个测试中都采用屏幕截图,并且该元素通常会在500毫秒后加载,则此方法会在构建时间后增加一个小时。 – anotherdave

+0

@sircapsalot如果我想我的浏览器保持打开加收2秒钟,这两点关闭之前(我称之为.Quit()),我应该怎么办呢? – MStodd

1

万一它会帮助别人,你应该尽量避免隐含的等待,特别是Thread#sleep尽可能多的,你可以。如果你这样做Thread.sleep(10),你的代码将总是等待10秒钟,即使在情况下1秒后您的网页已准备就绪。所以如果你经常使用这个,这可以大大减缓你的测试。

更好的办法是使用ExplicitWaits你意味着你将等待确切只要一些动作发生或某些元素被呈现在页面上。所以在你的情况下,我会使用明确的等待来检查是否加载了所有内容,然后截取屏幕截图。

+0

谢谢ExplicitWaits链接,真的有帮助! :) –

0

如果要延迟一定的秒数,而不是尽快作出回应,这里是类似暂停的功能是什么硒IDE提供:

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

source