我有一个模拟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,但这似乎是优步所做的改变之一。也许这就是问题的一部分?
发布于 2015-08-30 05:35:06
虽然它并不完美,但是将WebClient设置为FIREFOX_17而不是CHROME似乎解决了这个问题。
var webClient = new WebClient(BrowserVersion.FIREFOX_17);https://stackoverflow.com/questions/32288348
复制相似问题