无法使用NHtmlUnit单击按钮

时间:2015-08-29 16:38:38

标签: oauth-2.0 nunit nhtmlunit

我有一个模拟Uber登录的单元测试。目标是获取在没有交互式登录的情况下无法访问的令牌。我已经通过了这项工作,但看起来优步登录体验已经改变,现在我遇到了让NHtmlUnit成功提交登录按钮的问题。

这是我最近的尝试:https://github.com/wadewegner/uber-sdk-for-net/blob/42fd845fe43e11e3153b07d830ed40e3577b1ed3/src/UberSDKForNet.FunctionalTests/Tests.cs#L100

这是关键领域:

var loginFormButtons = loginForm.GetElementsByTagName("button");
Assert.IsNotNull(loginFormButtons);

var loginButton = (HtmlButton)loginFormButtons.First();
Assert.IsNotNull(loginButton);

var loginButtonText = loginButton.AsText();
StringAssert.Contains("sign in", loginButtonText.toLowerCase());

loginButton.SetAttribute("type", "submit");
loginForm.AppendChild(loginButton);

var consentPage = (HtmlPage)loginButton.Click();
Assert.IsNotNull(consentPage);

我知道代码很冗长,但单元测试NHtmlUnit是一场噩梦。我也试过了很多不同的排列,但它们几乎都以HtmlButton结束。

https://github.com/wadewegner/uber-sdk-for-net/blob/42fd845fe43e11e3153b07d830ed40e3577b1ed3/src/UberSDKForNet.FunctionalTests/Tests.cs#L174之前,一切都很顺利。我期望将此带到同意页面,我允许或拒绝优步应用程序访问我的信息。但是,它似乎只是重新加载原始页面,而consentPage似乎与loginPage完全相同。

任何可能有一些想法的NHtmlUnit专家?

我唯一要指出的是,过去我能够成功使用HtmlSubmitInput代替HtmlButton,但这似乎是优步所做的改变之一。也许这是问题的一部分?

1 个答案:

答案 0 :(得分:0)

嗯,它并不完美,但似乎将WebClient设置为FIREFOX_17而不是CHROME解决了它。

var webClient = new WebClient(BrowserVersion.FIREFOX_17);

见这里:https://github.com/wadewegner/uber-sdk-for-net/blob/ceb1cdf80cebb31608744c050b649ddd6a75fb7a/src/UberSDKForNet.FunctionalTests/Tests.cs#L107