I have a problem on taking the snapshot of html document running on different browsers. I want to take snapshots of the web page running in different browser (Chrome,Fire Fox,ie etc) for browser comp ability test but i am getting the problem with html document loading time and here is my code,
private void button1_Click(object sender, EventArgs e)
{
//Process p = new Process();
// p.StartInfo = new ProcessStartInfo();
foreach (string key in ConfigurationManager.AppSettings.Keys)
{
Process p = new Process();
p.StartInfo = new ProcessStartInfo();
p.StartInfo.FileName = ConfigurationManager.AppSettings[key];
p.StartInfo.Arguments = @"www.google.com";
p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
p.Start();
p.PriorityClass = ProcessPriorityClass.High;
System.Threading.Thread.Sleep(30000);
Rectangle bounds = Screen.GetBounds(Point.Empty);
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
bitmap.Save("E:\\ChandraPrakash\\My Testings\\Screen Grab\\Images\\screen_shot" + key + ".jpg", ImageFormat.Jpeg);
}
this.WindowState = FormWindowState.Normal;
this.BringToFront();
this.Focus();
//p.Kill();
}
}
and my app.config code is ,
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Chrome" value="C:\Documents and Settings\uba\Local Se开发者_如何学Cttings\Application Data\Google\Chrome\Application\chrome.exe"/>
<add key="Firefox" value="C:\Program Files\Mozilla Firefox\firefox.exe"/>
<add key="Safari" value="C:\Program Files\Safari\Safari.exe"/>
<add key="Ie" value="C:\Program Files\Internet Explorer\IEXPLORE.EXE"/>
<add key="Opera" value="C:\Program Files\Opera\opera.exe"/>
</appSettings>
</configuration>
Here i am using System.Threading.Thread.Sleep(10000);
but it doesn't work if page is loaded slowly so,how can i know the page loading time? Is there another way to take screen shot of a Html document in different Browser?
Thanks in advance.
I don't know of any "standard" way you could communicate with each of those different browsers- they each use their own API, and, although they each implement similar features, are notorious for doing things their own way.
For a simple way to interact with Internet Explorer windows, see this article.
As for determining when the page is loaded with firefox and Google Chrome, I'm at as much of a loss as you are, as is everyone else tackling this problem from what I can tell (via a few Google searches).
As @Michael Hoffmann said, there are numerous people wanting to use Chrome and/or FireFox in .NET instead of IE (which you can use through the WebBrowser control). Just today there was a question - What is the best WebBrowser control that allows one proxy per instance? - about the very matter, which may be of use for finding a way to use Chrome. As for FireFox, I have no idea.
I don't think you're going to find an easy answer here. A lot of Google searches and more specific questions on StackOverflow might do you some good.
Edit: As another thought, maybe you can make extensions for Chrome and Firefox that you can use in conjunction with command line parameters to the browsers and then still use the WebBrowser control for IE. I don't know if browser extensions can key off command line parameters to the application (for Chrome there's a several month old question about it - http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/2c117973a514495e?pli=1 - and we all know how fast Chrome changes), but it's worth a shot. Of course, this is really only practical for an app on your own machine, I doubt you want to be installing you own app, plus 2 extensions on a user's computer:
e.g.: C# app launches Process - "chrome http://site.com -reportLoaded" --> Chrome loads and your Chrome extension sees the 'reportLoaded' parameter --> http://site.com finishes loading --> Chrome notifies your extension --> your extension notifies your C# app --> you take a picture.
Thank you Michael and Chad.I am not able to find out the way to communicate with web browsers from win application,so i am finally using Selenium-RC to take the screen shot of a web page in my project and here is the documentation url :http://seleniumhq.org/docs/05_selenium_rc.html
精彩评论