我有一个模拟Uber登录的单元测试。目标是获取在没有交互式登录的情况下无法访问的令牌。我已经通过了这项工作,但看起来优步登录体验已经改变,现在我遇到了让NHtmlUnit成功提交登录按钮的问题。
这是关键领域:
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
,但这似乎是优步所做的改变之一。也许这是问题的一部分?
答案 0 :(得分:0)
嗯,它并不完美,但似乎将WebClient
设置为FIREFOX_17
而不是CHROME
解决了它。
var webClient = new WebClient(BrowserVersion.FIREFOX_17);