diff --git a/Appium Wizard/MainScreen.Designer.cs b/Appium Wizard/MainScreen.Designer.cs index e7ba3e1..40ec031 100644 --- a/Appium Wizard/MainScreen.Designer.cs +++ b/Appium Wizard/MainScreen.Designer.cs @@ -93,6 +93,7 @@ private void InitializeComponent() cLIArgumentsToolStripMenuItem = new ToolStripMenuItem(); otherDocsToolStripMenuItem = new ToolStripMenuItem(); iOSNativeAppsBundleToolStripMenuItem = new ToolStripMenuItem(); + downloadITunesToolStripMenuItem = new ToolStripMenuItem(); troubleshootToolStripMenuItem = new ToolStripMenuItem(); reportAnIssueToolStripMenuItem = new ToolStripMenuItem(); openLogsFolderToolstripMenuItem = new ToolStripMenuItem(); @@ -138,6 +139,7 @@ private void InitializeComponent() OpenDropDownButton = new Button(); openContextMenuStrip = new ContextMenuStrip(components); reInitializeDeviceToolStripMenuItem = new ToolStripMenuItem(); + downloadPlatformToolsToolStripMenuItem = new ToolStripMenuItem(); contextMenuStrip1.SuspendLayout(); menuStrip1.SuspendLayout(); tabControl1.SuspendLayout(); @@ -306,7 +308,7 @@ private void InitializeComponent() menuStrip1.Location = new Point(0, 0); menuStrip1.Name = "menuStrip1"; menuStrip1.Padding = new Padding(2, 2, 0, 2); - menuStrip1.Size = new Size(1440, 24); + menuStrip1.Size = new Size(1284, 24); menuStrip1.TabIndex = 10; menuStrip1.Text = "menuStrip1"; // @@ -377,7 +379,7 @@ private void InitializeComponent() // inspectorToolStripMenuItem1.Image = Properties.Resources.inspector; inspectorToolStripMenuItem1.Name = "inspectorToolStripMenuItem1"; - inspectorToolStripMenuItem1.Size = new Size(211, 30); + inspectorToolStripMenuItem1.Size = new Size(203, 22); inspectorToolStripMenuItem1.Text = "Inspector"; inspectorToolStripMenuItem1.Click += inspectorToolStripMenuItem_Click; // @@ -385,7 +387,7 @@ private void InitializeComponent() // iOSProfileManagementToolStripMenuItem.Image = Properties.Resources.management; iOSProfileManagementToolStripMenuItem.Name = "iOSProfileManagementToolStripMenuItem"; - iOSProfileManagementToolStripMenuItem.Size = new Size(211, 30); + iOSProfileManagementToolStripMenuItem.Size = new Size(203, 22); iOSProfileManagementToolStripMenuItem.Text = "iOS Profile Management"; iOSProfileManagementToolStripMenuItem.Click += iOSProfileManagementToolStripMenuItem_Click; // @@ -393,7 +395,7 @@ private void InitializeComponent() // signIPAToolStripMenuItem.Image = Properties.Resources.digital_signature; signIPAToolStripMenuItem.Name = "signIPAToolStripMenuItem"; - signIPAToolStripMenuItem.Size = new Size(211, 30); + signIPAToolStripMenuItem.Size = new Size(203, 22); signIPAToolStripMenuItem.Text = "IPA Signer"; signIPAToolStripMenuItem.Click += signIPAToolStripMenuItem_Click; // @@ -401,7 +403,7 @@ private void InitializeComponent() // testRunnerToolStripMenuItem.Image = Properties.Resources.runner; testRunnerToolStripMenuItem.Name = "testRunnerToolStripMenuItem"; - testRunnerToolStripMenuItem.Size = new Size(211, 30); + testRunnerToolStripMenuItem.Size = new Size(203, 22); testRunnerToolStripMenuItem.Text = "Test Runner"; testRunnerToolStripMenuItem.Click += testRunnerToolStripMenuItem_Click; // @@ -409,7 +411,7 @@ private void InitializeComponent() // downloadWDAToolStripMenuItem.Image = Properties.Resources.wda; downloadWDAToolStripMenuItem.Name = "downloadWDAToolStripMenuItem"; - downloadWDAToolStripMenuItem.Size = new Size(211, 30); + downloadWDAToolStripMenuItem.Size = new Size(203, 22); downloadWDAToolStripMenuItem.Text = "Download WDA"; downloadWDAToolStripMenuItem.ToolTipText = "Downloads the WebDriverAgentRunner IPA file from official Github repository."; downloadWDAToolStripMenuItem.Click += downloadWDAToolStripMenuItem_Click; @@ -419,7 +421,7 @@ private void InitializeComponent() openCMDToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { adbCommandsToolStripMenuItem, iOSCommandsToolStripMenuItem }); openCMDToolStripMenuItem.Image = Properties.Resources.terminal; openCMDToolStripMenuItem.Name = "openCMDToolStripMenuItem"; - openCMDToolStripMenuItem.Size = new Size(211, 30); + openCMDToolStripMenuItem.Size = new Size(203, 22); openCMDToolStripMenuItem.Text = "Open CMD"; openCMDToolStripMenuItem.ToolTipText = "Opens command prompt with ADB or iOS server commands."; // @@ -427,7 +429,7 @@ private void InitializeComponent() // adbCommandsToolStripMenuItem.Image = Properties.Resources.android; adbCommandsToolStripMenuItem.Name = "adbCommandsToolStripMenuItem"; - adbCommandsToolStripMenuItem.Size = new Size(188, 30); + adbCommandsToolStripMenuItem.Size = new Size(162, 22); adbCommandsToolStripMenuItem.Text = "ADB Commands"; adbCommandsToolStripMenuItem.ToolTipText = "Opens CMD in ADB path and displays available ADB commands."; adbCommandsToolStripMenuItem.Click += adbCommandsToolStripMenuItem_Click; @@ -436,7 +438,7 @@ private void InitializeComponent() // iOSCommandsToolStripMenuItem.Image = Properties.Resources.apple; iOSCommandsToolStripMenuItem.Name = "iOSCommandsToolStripMenuItem"; - iOSCommandsToolStripMenuItem.Size = new Size(188, 30); + iOSCommandsToolStripMenuItem.Size = new Size(162, 22); iOSCommandsToolStripMenuItem.Text = "iOS Commands"; iOSCommandsToolStripMenuItem.ToolTipText = "Opens CMD in iOS server path and displays available iOS server commands."; iOSCommandsToolStripMenuItem.Click += iOSCommandsToolStripMenuItem_Click; @@ -533,7 +535,7 @@ private void InitializeComponent() appiumDocsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { capabilitiesToolStripMenuItem, settingsAPIToolStripMenuItem, pluginsToolStripMenuItem, xCUITestToolStripMenuItem, uIAutomatorToolStripMenuItem, serverSecurityToolStripMenuItem, cLIArgumentsToolStripMenuItem }); appiumDocsToolStripMenuItem.Image = Properties.Resources.doc; appiumDocsToolStripMenuItem.Name = "appiumDocsToolStripMenuItem"; - appiumDocsToolStripMenuItem.Size = new Size(247, 22); + appiumDocsToolStripMenuItem.Size = new Size(255, 30); appiumDocsToolStripMenuItem.Text = "Appium Docs"; // // capabilitiesToolStripMenuItem @@ -642,25 +644,33 @@ private void InitializeComponent() // // otherDocsToolStripMenuItem // - otherDocsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { iOSNativeAppsBundleToolStripMenuItem }); - otherDocsToolStripMenuItem.Image = Properties.Resources.doc; + otherDocsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { iOSNativeAppsBundleToolStripMenuItem, downloadITunesToolStripMenuItem, downloadPlatformToolsToolStripMenuItem }); + otherDocsToolStripMenuItem.Image = Properties.Resources.link; otherDocsToolStripMenuItem.Name = "otherDocsToolStripMenuItem"; - otherDocsToolStripMenuItem.Size = new Size(247, 22); - otherDocsToolStripMenuItem.Text = "Other Docs"; + otherDocsToolStripMenuItem.Size = new Size(255, 30); + otherDocsToolStripMenuItem.Text = "Helpful Links"; // // iOSNativeAppsBundleToolStripMenuItem // iOSNativeAppsBundleToolStripMenuItem.Image = Properties.Resources.link; iOSNativeAppsBundleToolStripMenuItem.Name = "iOSNativeAppsBundleToolStripMenuItem"; - iOSNativeAppsBundleToolStripMenuItem.Size = new Size(218, 22); + iOSNativeAppsBundleToolStripMenuItem.Size = new Size(226, 30); iOSNativeAppsBundleToolStripMenuItem.Text = "iOS Native Apps Bundle IDs"; iOSNativeAppsBundleToolStripMenuItem.Click += iOSNativeAppsBundleToolStripMenuItem_Click; // + // downloadITunesToolStripMenuItem + // + downloadITunesToolStripMenuItem.Image = Properties.Resources.link; + downloadITunesToolStripMenuItem.Name = "downloadITunesToolStripMenuItem"; + downloadITunesToolStripMenuItem.Size = new Size(226, 30); + downloadITunesToolStripMenuItem.Text = "Download iTunes"; + downloadITunesToolStripMenuItem.Click += downloadITunesToolStripMenuItem_Click; + // // troubleshootToolStripMenuItem // troubleshootToolStripMenuItem.Image = Properties.Resources.guide; troubleshootToolStripMenuItem.Name = "troubleshootToolStripMenuItem"; - troubleshootToolStripMenuItem.Size = new Size(247, 22); + troubleshootToolStripMenuItem.Size = new Size(255, 30); troubleshootToolStripMenuItem.Text = "Troubleshooting Guide"; troubleshootToolStripMenuItem.Click += fAQToolStripMenuItem_Click; // @@ -668,7 +678,7 @@ private void InitializeComponent() // reportAnIssueToolStripMenuItem.Image = Properties.Resources.bug; reportAnIssueToolStripMenuItem.Name = "reportAnIssueToolStripMenuItem"; - reportAnIssueToolStripMenuItem.Size = new Size(247, 22); + reportAnIssueToolStripMenuItem.Size = new Size(255, 30); reportAnIssueToolStripMenuItem.Text = "Report an Issue | Feature Request"; reportAnIssueToolStripMenuItem.Click += reportAnIssueToolStripMenuItem_Click; // @@ -676,7 +686,7 @@ private void InitializeComponent() // openLogsFolderToolstripMenuItem.Image = Properties.Resources.log; openLogsFolderToolstripMenuItem.Name = "openLogsFolderToolstripMenuItem"; - openLogsFolderToolstripMenuItem.Size = new Size(247, 22); + openLogsFolderToolstripMenuItem.Size = new Size(255, 30); openLogsFolderToolstripMenuItem.Text = "Open Logs folder"; openLogsFolderToolstripMenuItem.Click += openLogsFolderToolstripMenuItem_Click; // @@ -684,7 +694,7 @@ private void InitializeComponent() // startADiscussionToolStripMenuItem.Image = Properties.Resources.Discussion; startADiscussionToolStripMenuItem.Name = "startADiscussionToolStripMenuItem"; - startADiscussionToolStripMenuItem.Size = new Size(247, 22); + startADiscussionToolStripMenuItem.Size = new Size(255, 30); startADiscussionToolStripMenuItem.Text = "Start a Discussion"; startADiscussionToolStripMenuItem.Click += startADiscussionToolStripMenuItem_Click; // @@ -692,7 +702,7 @@ private void InitializeComponent() // checkForUpdatesToolStripMenuItem.Image = Properties.Resources.update; checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem"; - checkForUpdatesToolStripMenuItem.Size = new Size(247, 22); + checkForUpdatesToolStripMenuItem.Size = new Size(255, 30); checkForUpdatesToolStripMenuItem.Text = "Check for Updates..."; checkForUpdatesToolStripMenuItem.Click += checkForUpdatesToolStripMenuItem_Click; // @@ -700,7 +710,7 @@ private void InitializeComponent() // changeLogToolStripMenuItem.Image = Properties.Resources.changelog; changeLogToolStripMenuItem.Name = "changeLogToolStripMenuItem"; - changeLogToolStripMenuItem.Size = new Size(247, 22); + changeLogToolStripMenuItem.Size = new Size(255, 30); changeLogToolStripMenuItem.Text = "Changelog"; changeLogToolStripMenuItem.Click += changeLogToolStripMenuItem_Click; // @@ -708,7 +718,7 @@ private void InitializeComponent() // readMeToolStripMenuItem.Image = Properties.Resources.readme; readMeToolStripMenuItem.Name = "readMeToolStripMenuItem"; - readMeToolStripMenuItem.Size = new Size(247, 22); + readMeToolStripMenuItem.Size = new Size(255, 30); readMeToolStripMenuItem.Text = "Read me"; readMeToolStripMenuItem.Click += readMeToolStripMenuItem_Click; // @@ -716,7 +726,7 @@ private void InitializeComponent() // aboutToolStripMenuItem.Image = Properties.Resources.information; aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - aboutToolStripMenuItem.Size = new Size(247, 22); + aboutToolStripMenuItem.Size = new Size(255, 30); aboutToolStripMenuItem.Text = "About"; aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click; // @@ -1094,12 +1104,20 @@ private void InitializeComponent() reInitializeDeviceToolStripMenuItem.Text = "Re-Initialize Device"; reInitializeDeviceToolStripMenuItem.Click += reInitializeDeviceToolStripMenuItem_Click; // + // downloadPlatformToolsToolStripMenuItem + // + downloadPlatformToolsToolStripMenuItem.Image = Properties.Resources.link; + downloadPlatformToolsToolStripMenuItem.Name = "downloadPlatformToolsToolStripMenuItem"; + downloadPlatformToolsToolStripMenuItem.Size = new Size(226, 30); + downloadPlatformToolsToolStripMenuItem.Text = "Download Platform Tools"; + downloadPlatformToolsToolStripMenuItem.Click += downloadPlatformToolsToolStripMenuItem_Click; + // // MainScreen // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; BackColor = SystemColors.ControlLightLight; - ClientSize = new Size(1440, 641); + ClientSize = new Size(1284, 641); Controls.Add(OpenDropDownButton); Controls.Add(openLogsButton); Controls.Add(mandatorymsglabel); @@ -1257,5 +1275,7 @@ private void InitializeComponent() private ToolStripMenuItem openCMDToolStripMenuItem; private ToolStripMenuItem adbCommandsToolStripMenuItem; private ToolStripMenuItem iOSCommandsToolStripMenuItem; + private ToolStripMenuItem downloadITunesToolStripMenuItem; + private ToolStripMenuItem downloadPlatformToolsToolStripMenuItem; } } \ No newline at end of file diff --git a/Appium Wizard/MainScreen.cs b/Appium Wizard/MainScreen.cs index 81b2fa6..f70b425 100644 --- a/Appium Wizard/MainScreen.cs +++ b/Appium Wizard/MainScreen.cs @@ -3283,6 +3283,42 @@ private void useUiAutomator2ToolStripMenuItem_Click(object sender, EventArgs e) } } + private void downloadITunesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + ProcessStartInfo psInfo = new ProcessStartInfo + { + FileName = "https://support.apple.com/en-us/docs/software/pl296", + UseShellExecute = true + }; + Process.Start(psInfo); + GoogleAnalytics.SendEvent("downloadITunesToolStripMenuItem_Click"); + } + catch (Exception exception) + { + GoogleAnalytics.SendEvent("downloadITunesToolStripMenuItem_Click", exception.Message); + } + } + + private void downloadPlatformToolsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + ProcessStartInfo psInfo = new ProcessStartInfo + { + FileName = "https://developer.android.com/tools/releases/platform-tools", + UseShellExecute = true + }; + Process.Start(psInfo); + GoogleAnalytics.SendEvent("downloadPlatformToolsToolStripMenuItem_Click"); + } + catch (Exception exception) + { + GoogleAnalytics.SendEvent("downloadPlatformToolsToolStripMenuItem_Click", exception.Message); + } + } + [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] private struct RECT { diff --git a/Appium Wizard/ScreenControl.cs b/Appium Wizard/ScreenControl.cs index 2566629..3ef43f0 100644 --- a/Appium Wizard/ScreenControl.cs +++ b/Appium Wizard/ScreenControl.cs @@ -58,7 +58,7 @@ public ScreenControl(string os, string Version, string udid, int width, int heig this.proxyPort = proxyPort; this.deviceModel = deviceModel; this.useScrcpy = useScrcpy; - udidScreenControl.Add(udid, this); + udidScreenControl.TryAdd(udid, this); this.screenPort = screenPort; if (devicePorts.ContainsKey(udid)) { @@ -1260,6 +1260,7 @@ private void SaveRecordedStepsToJson(string filePath) } } + bool isPlaying; bool stopExecution; private async void playStepsToolStripMenuItem_Click(object sender, EventArgs e) { if (isRecordingSteps) @@ -1272,14 +1273,30 @@ private async void playStepsToolStripMenuItem_Click(object sender, EventArgs e) MessageBox.Show("No steps recorded to play.", "Play Steps", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } - playStepsToolStripMenuItem.Enabled = false; + if (isPlaying) + { + stopExecution = true; + return; + } + //playStepsToolStripMenuItem.Enabled = false; + playStepsWithDurationToolStripMenuItem.Enabled = false; + playStepsWithRepetitionsToolStripMenuItem.Enabled = false; + playStepsToolStripMenuItem.Image = Resources.stop_button; + playStepsToolStripMenuItem.Text = "Stop execution"; + isPlaying = true; await Task.Run(() => { ExecuteRecordedActions(); }); + isPlaying = false; + stopExecution = false; MessageBox.Show("Steps playback completed.", "Play Steps", MessageBoxButtons.OK, MessageBoxIcon.Information); GoogleAnalytics.SendEvent("Steps playback completed", OSType); playStepsToolStripMenuItem.Enabled = true; + playStepsWithRepetitionsToolStripMenuItem.Enabled = true; + playStepsWithDurationToolStripMenuItem.Enabled = true; + playStepsToolStripMenuItem.Image = Resources.play; + playStepsToolStripMenuItem.Text = "Play Steps"; } private async void playStepsWithRepetitionsToolStripMenuItem_Click(object sender, EventArgs e) @@ -1294,6 +1311,11 @@ private async void playStepsWithRepetitionsToolStripMenuItem_Click(object sender MessageBox.Show("No steps recorded to play.", "Play Steps", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } + if (isPlaying) + { + stopExecution = true; + return; + } // Prompt user for number of repetitions using InputBox string input = Interaction.InputBox("Enter the number of times to repeat the steps:", "Play Steps - Repetitions", "1"); @@ -1310,23 +1332,32 @@ private async void playStepsWithRepetitionsToolStripMenuItem_Click(object sender } playStepsToolStripMenuItem.Enabled = false; - playStepsWithRepetitionsToolStripMenuItem.Enabled = false; playStepsWithDurationToolStripMenuItem.Enabled = false; - + playStepsWithRepetitionsToolStripMenuItem.Image = Resources.stop_button; + playStepsWithRepetitionsToolStripMenuItem.Text = "Stop execution"; + isPlaying = true; await Task.Run(() => { for (int i = 0; i < repetitions; i++) { + if (stopExecution) + { + repetitions = i; + break; + } ExecuteRecordedActions(); } }); - + isPlaying = false; + stopExecution = false; MessageBox.Show($"Steps playback completed ({repetitions} repetition(s)).", "Play Steps", MessageBoxButtons.OK, MessageBoxIcon.Information); GoogleAnalytics.SendEvent($"Steps playback completed with {repetitions} repetitions", OSType); playStepsToolStripMenuItem.Enabled = true; playStepsWithRepetitionsToolStripMenuItem.Enabled = true; playStepsWithDurationToolStripMenuItem.Enabled = true; + playStepsWithRepetitionsToolStripMenuItem.Image = Resources.play; + playStepsWithRepetitionsToolStripMenuItem.Text = "Play Steps (Repetitions)"; } private async void playStepsWithDurationToolStripMenuItem_Click(object sender, EventArgs e) @@ -1341,6 +1372,11 @@ private async void playStepsWithDurationToolStripMenuItem_Click(object sender, E MessageBox.Show("No steps recorded to play.", "Play Steps", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } + if (isPlaying) + { + stopExecution = true; + return; + } // Prompt user for duration in seconds using InputBox string input = Interaction.InputBox("Enter the duration in seconds to repeat the steps:", "Play Steps - Duration", "60"); @@ -1358,7 +1394,9 @@ private async void playStepsWithDurationToolStripMenuItem_Click(object sender, E playStepsToolStripMenuItem.Enabled = false; playStepsWithRepetitionsToolStripMenuItem.Enabled = false; - playStepsWithDurationToolStripMenuItem.Enabled = false; + playStepsWithDurationToolStripMenuItem.Image = Resources.stop_button; + playStepsWithDurationToolStripMenuItem.Text = "Stop execution"; + isPlaying = true; int executionCount = 0; await Task.Run(() => @@ -1368,23 +1406,34 @@ await Task.Run(() => while (DateTime.Now < endTime) { + if (stopExecution) + { + break; + } ExecuteRecordedActions(); executionCount++; } }); - + isPlaying = false; + stopExecution = false; MessageBox.Show($"Steps playback completed ({executionCount} execution(s) in {durationSeconds} seconds).", "Play Steps", MessageBoxButtons.OK, MessageBoxIcon.Information); GoogleAnalytics.SendEvent($"Steps playback completed with {durationSeconds}s duration", OSType); playStepsToolStripMenuItem.Enabled = true; playStepsWithRepetitionsToolStripMenuItem.Enabled = true; playStepsWithDurationToolStripMenuItem.Enabled = true; + playStepsWithDurationToolStripMenuItem.Image = Resources.play; + playStepsWithDurationToolStripMenuItem.Text = "Play Steps (Duration)"; } private void ExecuteRecordedActions() { foreach (var action in recordedActions) { + if (stopExecution) + { + break; + } switch (action.ActionType) { case "Click on coordinates":