0

我已经在 AWS 上设置了一个 Windows Server 2012 实例,并且正在使用 Selenium 网格服务器运行 Jenkins。构建部分运行良好,但是当它尝试调用 browserMob.NET server.CreateProxy() 调用时失败并出现 404。我想这可能是一个安全端口问题,所以我打开了 9090 和 9091,但仍然遇到同样的问题。如果我在本地系统上使用 IWebDriver,一切正常,但是当我切换到 remoteWebDriver 并将其指向 AWS 服务器并尝试代理时,我得到一个错误。如果有人对我如何解决这个问题有任何想法,我已经准备好朝着正确的方向前进:) 谢谢!

--编辑:更多信息:我现在让 Jenkins 在 8081 上运行,现在它以 InvalidOperationException 停止。在 server.CreateProxy() 的同一次调用中,触发的错误说:

“指定的域不存在或无法联系”

目前在 IIS8 中打开的端口有 80、9090、9091 和 8080

我还将项目下载到服务器并尝试从服务器运行它,我看到了同样的事情。我还在运行 IWebDriver,但它不起作用。因此,如果我在我的个人 Win 7 Box 上本地运行它,它可以正常工作,但是当我从 Windows Server 2012 运行它时,它就不行了。这是同一个项目,但我不知道这里可能发生了什么。

try
{
Server server = new Server(pathToBrowserMobProxy);
server.Start();

Client client = server.CreateProxy();
client.NewHar("google");

var seleniumProxy = new Proxy { HttpProxy = client.SeleniumProxy };
var capabilities = DesiredCapabilities.Firefox();
capabilities.SetCapability(CapabilityType.Proxy, seleniumProxy);

var driver = new RemoteWebDriver(new Uri(seleniumServerUrl), capabilities);
driver.Navigate().GoToUrl("http://www.google.co.uk");

HarResult harData = client.GetHar();

driver.Quit();
client.Close();
server.Stop();

return Newtonsoft.Json.JsonConvert.SerializeObject(harData);
}
catch (Exception e) { throw e; }
4

1 回答 1

1

所以我终于弄清楚发生了什么,并认为我会在这里发帖。对 server.CreateProxy 的调用使用了 AutomatedTester.BrowserMob .NET 包装器。这在内部引用了一个编译为 32 位的 Newtonsoft JSON.net 版本。由于这个和我的 Server 2012 机器是 64 位的,当它实例化“进程”对象时,它会导致错误说明“32 位进程无法访问 64 位进程的模块”。它会打开命令窗口,然后崩溃,这将关闭窗口,并且它无法找到要连接的实例。在查看 299 的 NativeErrorCode 时,我发现这说明只有部分 ReadProcessMemory 或 WriteProcessMemory 请求已完成。所以我得到了AutomatedTester的src,删除了他们正在使用的 newtonsoft 的引用(因为这是我找到的第一个 32 位引用)并添加了为任何 CPU 编译的 Nuget 版本。这停止了​​崩溃并允许我运行我的测试。希望有一天这对其他人有所帮助。

于 2014-01-27T13:01:05.777 回答