diff --git a/src/Winium.Desktop.Driver/App.config b/src/Winium.Desktop.Driver/App.config index d0feca6..4bfa005 100644 --- a/src/Winium.Desktop.Driver/App.config +++ b/src/Winium.Desktop.Driver/App.config @@ -1,6 +1,6 @@ - + diff --git a/src/Winium.Desktop.Driver/Automator/Automator.cs b/src/Winium.Desktop.Driver/Automator/Automator.cs index 88f8d25..87ab45c 100644 --- a/src/Winium.Desktop.Driver/Automator/Automator.cs +++ b/src/Winium.Desktop.Driver/Automator/Automator.cs @@ -1,5 +1,6 @@ namespace Winium.Desktop.Driver.Automator { + using System; #region using using System.Collections.Generic; @@ -63,7 +64,13 @@ public static Automator InstanceForSession(string sessionId) { if (sessionId == null) { - sessionId = "AwesomeSession"; + Random random = new Random(); + string randomNumber = string.Empty; + for (int i = 0; i < 10; i++) + { + randomNumber += random.Next(0, 10).ToString(); + } + sessionId = randomNumber; } // TODO: Add actual support for sessions. Temporary return single Automator for any season diff --git a/src/Winium.Desktop.Driver/Automator/Capabilities.cs b/src/Winium.Desktop.Driver/Automator/Capabilities.cs index 8a6b2d7..5bd26ad 100644 --- a/src/Winium.Desktop.Driver/Automator/Capabilities.cs +++ b/src/Winium.Desktop.Driver/Automator/Capabilities.cs @@ -27,22 +27,22 @@ internal Capabilities() #region Public Properties - [JsonProperty("app")] + [JsonProperty("winium:app")] public string App { get; set; } - [JsonProperty("args")] + [JsonProperty("winium:args")] public string Arguments { get; set; } - [JsonProperty("debugConnectToRunningApp")] + [JsonProperty("winium:debugConnectToRunningApp")] public bool DebugConnectToRunningApp { get; set; } - [JsonProperty("innerPort")] + [JsonProperty("winium:innerPort")] public int InnerPort { get; set; } - [JsonProperty("keyboardSimulator")] + [JsonProperty("winium:keyboardSimulator")] public KeyboardSimulatorType KeyboardSimulator { get; set; } - [JsonProperty("launchDelay")] + [JsonProperty("winium:launchDelay")] public int LaunchDelay { get; set; } #endregion diff --git a/src/Winium.Desktop.Driver/CommandExecutors/DoubleClickElementExecutor.cs b/src/Winium.Desktop.Driver/CommandExecutors/DoubleClickElementExecutor.cs new file mode 100644 index 0000000..fae15bc --- /dev/null +++ b/src/Winium.Desktop.Driver/CommandExecutors/DoubleClickElementExecutor.cs @@ -0,0 +1,17 @@ +namespace Winium.Desktop.Driver.CommandExecutors +{ + internal class DoubleClickElementExecutor : CommandExecutorBase + { + #region Methods + + protected override string DoImpl() + { + var registeredKey = this.ExecutedCommand.Parameters["ID"].ToString(); + this.Automator.ElementsRegistry.GetRegisteredElement(registeredKey).DoubleClick(); + + return this.JsonResponse(); + } + + #endregion + } +} diff --git a/src/Winium.Desktop.Driver/CommandExecutors/NewSessionExecutor.cs b/src/Winium.Desktop.Driver/CommandExecutors/NewSessionExecutor.cs index e9b448a..9888db9 100644 --- a/src/Winium.Desktop.Driver/CommandExecutors/NewSessionExecutor.cs +++ b/src/Winium.Desktop.Driver/CommandExecutors/NewSessionExecutor.cs @@ -5,6 +5,7 @@ using System.Threading; using Newtonsoft.Json; + using Newtonsoft.Json.Linq; using Winium.Cruciatus; using Winium.Cruciatus.Settings; @@ -22,9 +23,13 @@ protected override string DoImpl() { // It is easier to reparse desired capabilities as JSON instead of re-mapping keys to attributes and calling type conversions, // so we will take possible one time performance hit by serializing Dictionary and deserializing it as Capabilities object - var serializedCapability = - JsonConvert.SerializeObject(this.ExecutedCommand.Parameters["desiredCapabilities"]); - this.Automator.ActualCapabilities = Capabilities.CapabilitiesFromJsonString(serializedCapability); + JObject cap = + JObject.Parse( + JsonConvert.SerializeObject( + this.ExecutedCommand.Parameters["capabilities"])); + var firstMatch = cap.SelectToken("firstMatch").First; + this.Automator.ActualCapabilities = + Capabilities.CapabilitiesFromJsonString(firstMatch.ToString()); this.InitializeApplication(this.Automator.ActualCapabilities.DebugConnectToRunningApp); this.InitializeKeyboardEmulator(this.Automator.ActualCapabilities.KeyboardSimulator); @@ -32,7 +37,8 @@ protected override string DoImpl() // Gives sometime to load visuals (needed only in case of slow emulation) Thread.Sleep(this.Automator.ActualCapabilities.LaunchDelay); - return this.JsonResponse(ResponseStatus.Success, this.Automator.ActualCapabilities); + AutomatorResponse resp = new AutomatorResponse(this.Automator.Session, this.Automator.ActualCapabilities); + return this.JsonResponse(ResponseStatus.Success, resp); } private void InitializeApplication(bool debugDoNotDeploy = false) @@ -56,4 +62,25 @@ private void InitializeKeyboardEmulator(KeyboardSimulatorType keyboardSimulatorT #endregion } + + internal class AutomatorResponse + { + #region Constructors and Destructors + + public AutomatorResponse(string sessionId, Capabilities capabilities) + { + this.SessionId = sessionId; + this.Capabilities = capabilities; + } + #endregion + + #region Public Properties + + [JsonProperty("sessionId")] + public string SessionId { get; set; } + + [JsonProperty("capabilities")] + public Capabilities Capabilities { get; set; } + #endregion + } } diff --git a/src/Winium.Desktop.Driver/Properties/AssemblyInfo.cs b/src/Winium.Desktop.Driver/Properties/AssemblyInfo.cs index a0f424a..563ec2a 100644 --- a/src/Winium.Desktop.Driver/Properties/AssemblyInfo.cs +++ b/src/Winium.Desktop.Driver/Properties/AssemblyInfo.cs @@ -34,5 +34,5 @@ // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.2.0.0")] -[assembly: AssemblyFileVersion("1.6.0.*")] +[assembly: AssemblyFileVersion("1.6.0")] [assembly: AssemblyInformationalVersion("1.6.0")] diff --git a/src/Winium.Desktop.Driver/UriDispatchTables.cs b/src/Winium.Desktop.Driver/UriDispatchTables.cs index aa3e610..1eb994e 100644 --- a/src/Winium.Desktop.Driver/UriDispatchTables.cs +++ b/src/Winium.Desktop.Driver/UriDispatchTables.cs @@ -163,6 +163,9 @@ private void InitializeSeleniumCommandDictionary() this.commandDictionary.Add( DriverCommand.ClickElement, new CommandInfo("POST", "/session/{sessionId}/element/{id}/click")); + this.commandDictionary.Add( + DriverCommand.DoubleClickElement, + new CommandInfo("POST", "/session/{sessionId}/element/{id}/doubleClickElement")); this.commandDictionary.Add( DriverCommand.GetElementText, new CommandInfo("GET", "/session/{sessionId}/element/{id}/text")); diff --git a/src/Winium.Desktop.Driver/Winium.Desktop.Driver.csproj b/src/Winium.Desktop.Driver/Winium.Desktop.Driver.csproj index 1ad8823..ce17882 100644 --- a/src/Winium.Desktop.Driver/Winium.Desktop.Driver.csproj +++ b/src/Winium.Desktop.Driver/Winium.Desktop.Driver.csproj @@ -1,5 +1,6 @@  + Debug @@ -9,11 +10,13 @@ Properties Winium.Desktop.Driver Winium.Desktop.Driver - v4.5.1 + v4.8 512 ..\ true + + AnyCPU @@ -39,23 +42,24 @@ ..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.13.0.4\lib\net45\Newtonsoft.Json.dll - + ..\packages\NLog.3.1.0.0\lib\net45\NLog.dll True + + ..\packages\Selenium.WebDriver.4.44.0\lib\net462\Selenium.WebDriver.dll + + + - - ..\packages\Selenium.WebDriver.2.53.1\lib\net40\WebDriver.dll - True - ..\packages\InputSimulator.1.0.4.0\lib\net20\WindowsInput.dll @@ -69,6 +73,7 @@ + @@ -153,6 +158,7 @@ This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. +