以下是我的开发环境的详细信息:
-Visual Studio 2012 Ultimate更新4
-谷歌浏览器版本40.0.2214.94 m
-具有32位操作系统的Windows 7 Professional
我的Google Chrome浏览器的用户代理字符串是:
Mozilla / 5.0(Windows NT 6.1)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 40.0.2214.94 Safari / 537.36
我的自动UI测试代码中的C#代码如下:
var options = new PhantomJSOptions();
// Chrome User Agent ( Chrome Version 40.0.2214.94 m )
options.AddAdditionalCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36");
driver = new OpenQA.Selenium.PhantomJS.PhantomJSDriver(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\packages\PhantomJS.1.9.8\tools\phantomjs"), options);
url = new Uri("http://localhost:2816/");
IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(90.00));
wait.Until(ExpectedConditions.ElementIsClickable( By.XPath("//a[text()='Users']")));
IWebElement btn = waitArg.Until<IWebElement>((d) => {
try{
return d.FindElement( By.XPath("//a[text()='Users']") );
}
catch {
return null;
}
});
btn.Click();
不幸的是,上面的代码很难找到元素。我相信,如果我可以配置代码中使用的PhantomJS驱动程序,以更紧密地模拟桌面上的Google Chrome版本40.0.2214.94 m浏览器,那么只要有时间,自动UI测试代码就应该能够提供更一致,更准确的测试结果测试运行。
有人可以建议我是否可以对以下代码进行一些修改,使其更接近于我的Google Chrome版本40.0.2214.94 m浏览器?
var options = new PhantomJSOptions();
// Chrome User Agent ( Chrome Version 40.0.2214.94 m )
options.AddAdditionalCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36");
driver = new OpenQA.Selenium.PhantomJS.PhantomJSDriver(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\packages\PhantomJS.1.9.8\tools\phantomjs"), options);
在@ artjom-b的帮助下更新答案
var options = new PhantomJSOptions();
options.AddAdditionalCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36");
var service = PhantomJSDriverService.CreateDefaultService(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"..\..\..\packages\PhantomJS.1.9.8\tools\phantomjs"));
service.SslProtocol = "any";
driver = new PhantomJSDriver(service, options);
url = new Uri("http://localhost:2816/");
// 1280, height: 1024
// @artjom-b strongly recommened that the Driver's Window Size be quite large. Let's set the Window Size to quite large.
driver.Manage().Window.Size = new System.Drawing.Size(1280, 1024); // Size is a type in assembly "System.Drawing"
PhantomJS是一个独立的(无头)浏览器。您无法对其进行配置,因此其行为类似于Chrome。对于渲染引擎,根本没有什么可配置的。您可以做一些事情,以便PhantomJS的行为类似于桌面浏览器。
首先是将视口大小设置为较大。PhantomJS在默认情况下以400x300的视口运行。视口可扩展为固定宽度的站点,但对于响应站点则保持较小。根据网站的编写方式,某些元素可能会隐藏并且无法单击。
请参阅:在Shannium驱动的PhantomJS C#中设置屏幕大小
第二件事是将用户代理字符串设置为最接近其功能的字符串。PhantomJS 1.x基于QtWebKit的旧版本。据说Chrome 13与它最兼容。
为什么这有关系?一些网站在遇到新的用户代理时会使用一些“实验性” JavaScript。使用旧的/匹配的用户代理字符串,以使执行此操作的网站不会发送时髦的JavaScript或PhantomJS无法理解的其他奇怪内容。谷歌确实做到了这一点。
用户代理字符串:
Mozilla / 5.0(Windows NT 6.0)AppleWebKit / 535.1(KHTML,like Gecko)Chrome / 13.0.782.41 Safari / 535.1
PhantomJS 1.x默认使用SSLv3,并且如果服务器不支持SSLv3(由于POODLE漏洞),则连接失败。使用any
PhantomJS可以接受它理解的所有SSL / TLS连接。
请参阅:答:Selenium Webdriver + PhantomJS对于特定站点仍然处于about:blank
PhantomJS 1.x不支持Function.prototype.bind
其他功能。C#的硒语言绑定支持执行PhantomJS脚本代码段(而非页面脚本),通过PhantomJSDriver.ExecutePhantomJS()
该代码段,可以运行垫片以对PhantomJS进行一些必要的功能改造。注释中提供的相关提交。
您无法真正做到以下几点:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句