在我的C#代码中,我使用Watin
来浏览网页,登录页面,我需要点击登录按钮,但是在我想要注销后,我就有了之后单击“注销”按钮,但注销部分不起作用。我甚至尝试在登录后关闭浏览器(使用close方法),但它不起作用。感觉就像页面一改变(即登录后),c#中的命令就不再有效。
有谁知道什么是错的?
答案 0 :(得分:1)
正如另一个答案中所提到的,Thread.Sleep(毫秒)是一种等待加载某个时间段的方法。非常,非常容易实现,但由于加载时间不同,它远远不是最佳的,如果你把它做得足够长以至于总是等待足够长的时间,你最终会浪费很多时间。在一次测试中,这不是什么大问题,但是例如,如果你必须等待5秒钟,你有1000次测试......等等。
我走的路线是:
现在等待我的主要原因是ASP.NET中的JQuery异步调用,我创建了一个静态帮助程序类,对我来说等待异步调用完成。这些往往非常特定于您正在测试的站点所编写的框架。
答案 1 :(得分:0)
watin click命令等待浏览器加载,所以实际上它等待回发。 如果您使用ClickNoWait()命令它将不会等待。 因此,如果您的代码看起来像这样,它应该可以工作:
browser.GoTo("www.your-site.com");
// fill user/pass
browser.Button(Find.ByClass("login-class")).Click();
browser.Button(Find.ByClass("logout-class")).Click();
如果它仍无法正常工作,您可以在登录后添加此内容点击 browser.WaitForComplete();
答案 2 :(得分:0)
在Watin中,您会遇到许多代码无阻塞的情况(您将执行一行代码并立即继续),因此对于这些情况,您需要找到一种不同的方式来了解下一页(动作等)已经存在。例如,在登录页面上,您可以检查该页面是否具有名为UserName的文本框:
<code>
TextField uName = browser.TextField(Find.ByName("userName"));
if(uName.Exists)
{
// Then do the login code....
}
</code>
以同样的方式,您应该在继续执行代码之前控制登录后的页面。例如,如果您要登录到您知道将包含文本的页面:&#34;您的帐户详细信息&#34;你可能会这样做:
<code>
browser.GoTo("http://www.yourdomain.com/login.aspx");
//do your login code
browser.WaitUntilContainsText("Your Account Details", 240); // the second parameter indicates the seconds it will wait before it times out.
// your code to deal with the page after the login.
</code>
使用Thread.Sleep是一个混乱的秘诀,这肯定是一个问题,你永远不会在网页上获得正确的时间(即使你认为它需要10秒钟,它可能永远不会回来和那一点,服务器将终止打开的连接。)
希望它有所帮助。
答案 3 :(得分:-1)
在脚本中使用Thread.sleep与注销和登录同步... 要么 而不是注销你直接关闭应用程序并使用ie实例重新登录到应用程序