在 Remotewebdriver 上执行 PhantomJS
executePhantomJS on Remotewebdriver
如果我使用网络驱动程序,那么它就可以完美运行
driver = new PhantomJSDriver(capabilities);
driver.executePhantomJS( "var page = this;");
我怎样才能让它发挥作用?
driver = new RemoteWebDriver(capabilities);
driver.executePhantomJS( "var page = this;");
更新
我的代码
capabilities = DesiredCapabilities.phantomjs();
driver = new RemoteWebDriver(capabilities);
driver.executePhantomJS( "var page = this; binary =0;mimetype=''; count = 0;id=0; bla = '{';"
+"page.onResourceReceived = function(request) {"
+ "if(id !== request.id){"
+"bla += '\"'+count+ '\":'+JSON.stringify(request, undefined, 4)+',';"
+"if(request.contentType.substring(0, 11) =='application'){"
+"console.log(request.contentType);"
+ "mimetype = request.contentType;"
+ "binary++;"
+ "}"
+"count++;"
+ "id = request.id;"
+ "}"
+"};");
Java 给出错误:RemoteWebDriver 类型未定义方法 executePhantomJS(String)。
如果我使用 executeScript,它将不起作用。
我需要 运行 100 个测试并行,我不能使用 webdriver。
我猜你想在你的 Se Grid 上使用 运行 PhantomJSDriver。这就是我的工作方式(C# 工厂实现):
public IWebDriver CreateWebDriver(string identifier)
{
if (identifier.ToLower().Contains("ghostdriver"))
{
return new RemoteWebDriver(new Uri(ConfigurationManager.AppSettings["Selenium.grid.Url"]), DesiredCapabilities.PhantomJS());
}
}
或者试试这个
Console.WriteLine("Creating GhostDriver (PhantomJS) driver.");
//Temporary commented for testing purposes
IWebDriver ghostDriver = new PhantomJSDriver("..\..\..\MyFramework\Drivers");
ghostDriver.Manage().Window.Maximize();
//ghostDriver.Manage().Window.Size = new Size(1920, 1080);
ghostDriver.Manage()
.Timeouts()
.SetPageLoadTimeout(new TimeSpan(0, 0, 0,
Convert.ToInt32(ConfigurationManager.AppSettings["Driver.page.load.time.sec"])));
return ghostDriver;
如果您想知道为什么有 ConfigurationManager
- 我避免使用硬编码值,所以它们是从 App.config
文件中提取的。
如果你想 运行 PhantomJS 脚本与 RemoteWebDriver(为了使用 Selenium Grid),我使用了以下解决方案(不幸的是只有 C#):
我必须扩展 RemoteWebDriver 以便它可以 运行 PhantomJS 命令:
public class RemotePhantomJsDriver : RemoteWebDriver
{
public RemotePhantomJsDriver(Uri remoteAddress, ICapabilities desiredCapabilities) : base(remoteAddress, desiredCapabilities)
{
this.CommandExecutor.CommandInfoRepository.TryAddCommand("executePhantomScript", new CommandInfo("POST", $"/session/{this.SessionId.ToString()}/phantom/execute"));
}
public Response ExecutePhantomJSScript(string script, params object[] args)
{
return base.Execute("executePhantomScript", new Dictionary<string, object>() { { "script", script }, { "args", args } });
}
}
在此之后,您可以使用 ExecutePhantomJSScript 方法 运行 任何 JavaScript 想要与 PhantomJS API 交互的代码。以下示例通过 PhantomJS API(网页模块)获取页面标题:
RemotePhantomJsDriver driver = new RemotePhantomJsDriver(new Uri("http://hub_host:hub_port/wd/hub"), DesiredCapabilities.PhantomJS());
driver.Navigate().GoToUrl("http://whosebug.com");
var result = driver.ExecutePhantomJSScript("var page = this; return page.title");
Console.WriteLine(result.Value);
driver.Quit();
如果我使用网络驱动程序,那么它就可以完美运行
driver = new PhantomJSDriver(capabilities);
driver.executePhantomJS( "var page = this;");
我怎样才能让它发挥作用?
driver = new RemoteWebDriver(capabilities);
driver.executePhantomJS( "var page = this;");
更新
我的代码
capabilities = DesiredCapabilities.phantomjs();
driver = new RemoteWebDriver(capabilities);
driver.executePhantomJS( "var page = this; binary =0;mimetype=''; count = 0;id=0; bla = '{';"
+"page.onResourceReceived = function(request) {"
+ "if(id !== request.id){"
+"bla += '\"'+count+ '\":'+JSON.stringify(request, undefined, 4)+',';"
+"if(request.contentType.substring(0, 11) =='application'){"
+"console.log(request.contentType);"
+ "mimetype = request.contentType;"
+ "binary++;"
+ "}"
+"count++;"
+ "id = request.id;"
+ "}"
+"};");
Java 给出错误:RemoteWebDriver 类型未定义方法 executePhantomJS(String)。
如果我使用 executeScript,它将不起作用。
我需要 运行 100 个测试并行,我不能使用 webdriver。
我猜你想在你的 Se Grid 上使用 运行 PhantomJSDriver。这就是我的工作方式(C# 工厂实现):
public IWebDriver CreateWebDriver(string identifier)
{
if (identifier.ToLower().Contains("ghostdriver"))
{
return new RemoteWebDriver(new Uri(ConfigurationManager.AppSettings["Selenium.grid.Url"]), DesiredCapabilities.PhantomJS());
}
}
或者试试这个
Console.WriteLine("Creating GhostDriver (PhantomJS) driver.");
//Temporary commented for testing purposes
IWebDriver ghostDriver = new PhantomJSDriver("..\..\..\MyFramework\Drivers");
ghostDriver.Manage().Window.Maximize();
//ghostDriver.Manage().Window.Size = new Size(1920, 1080);
ghostDriver.Manage()
.Timeouts()
.SetPageLoadTimeout(new TimeSpan(0, 0, 0,
Convert.ToInt32(ConfigurationManager.AppSettings["Driver.page.load.time.sec"])));
return ghostDriver;
如果您想知道为什么有 ConfigurationManager
- 我避免使用硬编码值,所以它们是从 App.config
文件中提取的。
如果你想 运行 PhantomJS 脚本与 RemoteWebDriver(为了使用 Selenium Grid),我使用了以下解决方案(不幸的是只有 C#):
我必须扩展 RemoteWebDriver 以便它可以 运行 PhantomJS 命令:
public class RemotePhantomJsDriver : RemoteWebDriver { public RemotePhantomJsDriver(Uri remoteAddress, ICapabilities desiredCapabilities) : base(remoteAddress, desiredCapabilities) { this.CommandExecutor.CommandInfoRepository.TryAddCommand("executePhantomScript", new CommandInfo("POST", $"/session/{this.SessionId.ToString()}/phantom/execute")); } public Response ExecutePhantomJSScript(string script, params object[] args) { return base.Execute("executePhantomScript", new Dictionary<string, object>() { { "script", script }, { "args", args } }); } }
在此之后,您可以使用 ExecutePhantomJSScript 方法 运行 任何 JavaScript 想要与 PhantomJS API 交互的代码。以下示例通过 PhantomJS API(网页模块)获取页面标题:
RemotePhantomJsDriver driver = new RemotePhantomJsDriver(new Uri("http://hub_host:hub_port/wd/hub"), DesiredCapabilities.PhantomJS()); driver.Navigate().GoToUrl("http://whosebug.com"); var result = driver.ExecutePhantomJSScript("var page = this; return page.title"); Console.WriteLine(result.Value); driver.Quit();