我有一个方法TestScenarios()
,它应该遍历一个场景数据库,对于数据库中的每个项目,导航到指定的URL,截取屏幕截图,并更改一些值。
我遇到问题的一行是webBrowser1.Navigate(Url);
行。当我单步执行该功能时,Url
的值为http://google.com
,但Web控件永远不会显示。
相反,它只是说“导航已被取消”的内容,这让我相信某些内容正在中断Navigate()
功能的完成。
此外,如果我在while循环之外粘贴一行webBrowser1.Navigate("http://google.com");
,它会显示Web控件,这意味着webBrowser
控件似乎正常运行。
基本上我只需要方向帮助。代码如下。
public void TestScenarios()
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Scenarios WHERE MarkedForDeletion!='1'", conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
// Store scenario information
int Id = (int) reader["ScenarioID"];
string Data = reader["ScenarioData"].ToString();
string Url = reader["ScenarioURL"].ToString();
// Navigate to webBrowser
webBrowser1.Navigate(Url);
// Do test
int HasSucceeded = 0;
if (Url == "http://bing.com")
{
HasSucceeded = 1;
}
// Take Screenshot
Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bitmap);
g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
ImageConverter converter = new ImageConverter();
Byte[] screenshot = (byte[])converter.ConvertTo(bitmap, typeof(byte[]));
// Insert results
InsertResults(Id, HasSucceeded, screenshot);
// Delete scenario
// DeleteScenario(Id);
// Mark scenario for deletion
MarkScenario(Id);
}
}
reader.Close();
}
}
}
答案 0 :(得分:2)
Web Browser.navigate异步发生。所以它正在导航(发出页面请求)然后立即转到下一个电话if url== "http://bing.com"
您希望这是异步的,因此您需要设置一个事件处理程序来处理导航已完成的事件
This Question有一些关于你如何应用
的信息