我正在为一个论坛创建一个大规模的用户名可用性检查器,但是当定时器设置为高速时,它有时会说该论坛的用户名不可用。
如何确保在跳转到列表框中的下一个用户名之前已正确检查用户名?
我的代码示例:
// Timer1
timer1.Stop();
webBrowser1.Document.GetElementById("username").InnerText = list.SelectedItem.ToString();
webBrowser1.Document.GetElementById("register").InvokeMember("Click");
list.SelectedIndex = list.SelectedIndex + 1;
timer2.Start();
// Timer2
timer2.Stop();
if (webBrowser1.Document.GetElementById("status").ToString().Contains("available"))
{
list2.Items.Add(list.SelectedItem.ToString());
timer1.Start();
}
else
{
timer1.Start();
}
我可以使用WatiN或其他东西来确保它在跳到下一个标记之前等待检查用户名的可用性吗?该页面无法重新加载。
答案 0 :(得分:0)
您可以轮询页面内容包含X或Y,然后继续。我假设页面将显示“可用”或“抱歉,选择其他”消息。如果你没有显示是/否状态,那就更难了。
类似以下内容:这是不测试代码,只是粗略地了解我在像您这样的场景中所做的事情。
int maxWaitTime = 5000
int timeWaited = 0
int interval
while (!status.text.contains("available")) && !status.text.contains("pick something else") && timewaited < maxWaitTime)
{
Thread.Sleep(X)
timeWaited += interval; //Add X miliseconds.
}
if (timeWaited >= maxWaitTime)
{
throw new TimeoutException("Took too long to get a status")
}