Skip to content

Selenium Upgrade and AI Related changes#4287

Merged
Maheshkale447 merged 6 commits into
Releases/Betafrom
Beta/BugFix/SeleniumDriverUpgrade
Aug 29, 2025
Merged

Selenium Upgrade and AI Related changes#4287
Maheshkale447 merged 6 commits into
Releases/Betafrom
Beta/BugFix/SeleniumDriverUpgrade

Conversation

@prashelke

@prashelke prashelke commented Aug 28, 2025

Copy link
Copy Markdown
Contributor

Thank you for your contribution.
Before submitting this PR, please make sure:

  • PR description and commit message should describe the changes done in this PR
  • Verify the PR is pointing to correct branch i.e. Release or Beta branch if the code fix is for specific release , else point it to master
  • Latest Code from master or specific release branch is merged to your branch
  • No unwanted\commented\junk code is included
  • No new warning upon build solution
  • Code Summary\Comments are added to my code which explains what my code is doing
  • Existing unit test cases are passed
  • New Unit tests are added for your development
  • Sanity Tests are successfully executed for New and Existing Functionality
  • Verify that changes are compatible with all relevant browsers and platforms.
  • After creating pull request there should not be any conflicts
  • Resolve all Codacy comments
  • Builds and checks are passed before PR is sent for review
  • Resolve code review comments
  • Update the Help Library document to match any feature changes

Summary by CodeRabbit

  • New Features

    • Configurable AI batch size for request processing.
    • Unified locator status shown as a single "Learned Type" field.
    • POMs now auto-save after successful element healing.
  • Style

    • Updated labels and tooltip text in the Learn wizard.
    • Removed AI-specific row highlighting and simplified AI processing visuals.
    • AI processing timer display format adjusted.
  • Chores

    • Upgraded browser automation/DevTools integration for broader compatibility.
    • Hardened AI request parsing and handling for greater robustness.

@coderabbitai

coderabbitai Bot commented Aug 28, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

Consolidates AI/auto-learn indicators into a single read-only LearnedType, removes AI-row UI styling and AI loader image, hardens GenAI JSON/reflection handling, adds configurable AIBatchSize, and upgrades Selenium DevTools to V139 with package bumps.

Changes

Cohort / File(s) Summary
POM Learn Wizard UI
Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml
Added a StackPanel ToolTip about external Ginger Play/AI requirement; renamed label from "AI Fine-Tuning Options" to "AI Integration Options".
POM elements & element details UI styling
Ginger/Ginger/ApplicationModelsLib/POMModels/PomElementsPage.xaml, Ginger/Ginger/UserControlsLib/UCElementDetails.xaml
Removed DataGridRow styles/DataTriggers that colored AI-generated rows; minor whitespace cleanup.
Locators grid & model
Ginger/Ginger/ApplicationModelsLib/POMModels/PomElementsPage.xaml.cs, Ginger/GingerCoreCommon/UIElement/ElementLocator.cs
Replaced IsAutoLearned/IsAIGenerated columns with a single read-only LearnedType column; added eLearnedType enum, LearnedTypeEnum and LearnedType properties; setters raise PropertyChanged for LearnedType; removed row-loading AI styling handling.
Wizard layout & timer
Ginger/Ginger/WizardLib/WizardWindow.xaml, Ginger/Ginger/WizardLib/WizardWindow.xaml.cs
Removed AI loader image/column and reflowed right-side columns/buttons; timer text formatting changed to use commas and stop resets base label; image visibility toggles removed.
GenAI robustness & batching
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMUtils.cs, Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs, Ginger/GingerCoreNET/GeneralLib/General.cs
Use case-insensitive reflection + CanWrite guard when setting properties; JSON parsing guarded with try/fallback and safer inner extraction; skip empty EnhanceLocatorsByAI entries; added configurable AIBatchSize retrieval (GetAIBatchsize) and dynamic batch-size override (note: duplicate GetAIBatchsize() declarations present).
Selenium DevTools & deps
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, Ginger/GingerCoreNET/GingerCoreNET.csproj
Migrated DevTools usage from V136 to V139 (aliases and DevToolsVersion added), switched to parameterless DevTools session API and version-specific domains, added domain/session availability guards, and bumped Selenium.WebDriver/Support package versions.
Cleanup & formatting
Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs, Ginger/Ginger/ApplicationModelsLib/POMModels/PomAllElementsPage.xaml.cs
Removed an obsolete commented field and performed minor whitespace/formatting edits.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant UI as POM UI / Wizard
  participant General as General.GetAIBatchsize()
  participant GPEM as GingerPlayEndPointManager
  participant POMU as POMUtils.SendInBatchesList

  User->>UI: Start GenAI processing
  UI->>General: GetAIBatchsize()
  General->>GPEM: GetAIBatchsize()
  GPEM-->>General: AIBatchSize (string)
  General-->>UI: AIBatchSize (string)
  UI->>POMU: SendInBatchesList(items, defaultBatch)
  note right of POMU #f9f9f9: If AIBatchSize provided,\noverride batch size before sending
  POMU-->>UI: Batch processing results
Loading
sequenceDiagram
  autonumber
  participant Caller as POMUtils
  participant JSON as JSON Parser
  participant Model as ElementWrapper/Locator

  Caller->>JSON: Parse cleanedResponse (try)
  alt contains data.genai_result
    JSON-->>Caller: genai_result token
    Caller->>JSON: Deserialize List<ElementWrapper>
  else parse fails or missing token
    JSON-->>Caller: JsonException or missing token
    Caller->>JSON: Fallback parse from cleanedResponse inner payload
  end
  loop EnhanceLocatorsByAI entries
    alt kvp.Value not null/empty
      Caller->>Model: Create locator object and add to element
    else
      Caller-->>Model: Skip empty entry
    end
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • Maheshkale447

Poem

I hop through grids where highlights fade,
A single LearnedType carrot neatly laid.
Batch by batch I nibble JSON strings,
Safe paws skipping empty things.
Wizard commas tick — small joyful hops! 🥕🐇


📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f7898c9 and ce4093b.

📒 Files selected for processing (1)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (9 hunks)
🧰 Additional context used
🧠 Learnings (11)
📚 Learning: 2025-07-10T07:11:28.974Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4249
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:4684-4695
Timestamp: 2025-07-10T07:11:28.974Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, attribute values used in CSS selectors (e.g., ByTitle, ByAriaLabel, ByDataTestId, ByPlaceholder) should be escaped using a helper method (such as EscapeCssAttributeValue) to prevent selector breakage due to special characters.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-08-25T09:27:30.249Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4281
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1433-1441
Timestamp: 2025-08-25T09:27:30.249Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, SetProxy(dynamic options) should not force options.AcceptInsecureCertificates = false. Only set AcceptInsecureCertificates = true when UseZAP is enabled to avoid breaking setups that permit self-signed/dev certificates.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-12-04T11:45:57.024Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4017
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:11096-11096
Timestamp: 2024-12-04T11:45:57.024Z
Learning: In the `OnNetworkRequestSent` method in `SeleniumDriver.cs`, adding a null check for `_BrowserHelper` is not necessary.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-06-24T06:08:31.804Z
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4242
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:623-656
Timestamp: 2025-06-24T06:08:31.804Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs, the CSS selector construction by directly interpolating user input values in the GetElementLocator method is considered acceptable by the team and working as expected for their use cases.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-07-16T14:17:56.429Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4254
File: Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs:89-93
Timestamp: 2025-07-16T14:17:56.429Z
Learning: In Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs, the user prashelke prefers to keep the current casing for properties `insideIframe` and `insideShadowDOM` in the `ElementwrapperContext` class rather than changing them to PascalCase.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-08-22T16:22:20.870Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4280
File: Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs:41-41
Timestamp: 2025-08-22T16:22:20.870Z
Learning: In Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs, the user prashelke prefers to keep the current lowercase naming for properties like `elementGuid` rather than changing them to PascalCase, likely for consistency within the ElementWrapperInfo data model classes.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-06-12T12:54:44.221Z
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3753
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:99-99
Timestamp: 2024-06-12T12:54:44.221Z
Learning: User IamRanjeetSingh prefers exceptions to propagate rather than being caught and handled locally within methods in `PlaywrightBrowserTab.cs`.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-08-25T09:20:17.608Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4281
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1958-1970
Timestamp: 2025-08-25T09:20:17.608Z
Learning: In Ginger security testing, passive ZAP scans should be invoked with an empty testURL (ActSecurityTesting.ExecutePassiveZapScan("", act)) to aggregate alerts across the entire ZAP session. Passing a URL scopes results to that base URL. Only the active scan path should pass Driver.Url, with null/empty checks. Context: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs :: ActSecurity. Confirmed by AmanPrasad43 in PR #4281.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-07-18T09:05:15.264Z
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#3835
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs:1022-1029
Timestamp: 2024-07-18T09:05:15.264Z
Learning: The user prefers readability over concise code in the context of deactivating locators in the `LearnElementInfoDetails` method of the `PlaywrightDriver` class.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-07-08T13:53:26.335Z
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3811
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserElement.cs:392-407
Timestamp: 2024-07-08T13:53:26.335Z
Learning: When suggesting to avoid throwing `System.Exception` directly, if the user defers the change, acknowledge their decision and note that the change might be considered in future revisions.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-06-16T10:37:13.073Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:19-22
Timestamp: 2025-06-16T10:37:13.073Z
Learning: In Ginger codebase, both `using amdocs.ginger.GingerCoreNET;` and `using Amdocs.Ginger.CoreNET;` are valid and serve different purposes. The first (lowercase) contains the WorkSpace class and related workspace functionality, while the second (proper case) contains drivers like GenericAppiumDriver and other core functionality. Both may be required in files that use types from both namespaces.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
🧬 Code graph analysis (1)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (2)
Ginger/GingerCoreNET/Application Models/Execution/POM/POMExecutionUtils.cs (8)
  • POMExecutionUtils (34-530)
  • POMExecutionUtils (39-50)
  • POMExecutionUtils (52-55)
  • POMExecutionUtils (57-61)
  • ApplicationPOMModel (65-77)
  • ElementInfo (79-98)
  • ElementInfo (100-128)
  • ElementInfo (130-141)
Ginger/GingerCoreCommon/Repository/ApplicationModelLib/POMModelLib/ApplicationPOMModel.cs (2)
  • ApplicationPOMModel (39-386)
  • ApplicationPOMModel (41-44)
🔇 Additional comments (6)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (6)

79-80: CDP v139 aliasing looks good.

Aliases to OpenQA.Selenium.DevTools.V139 are correct for the Selenium 4.35+ bindings. No further action.


4657-4659: No-op change.

Whitespace-only change; nothing to review.


9637-9662: Better diagnostics for missing POM element.

Clear error messages for POM context/element not found improve debuggability. Looks good.


11682-11699: DevTools setup hardened and Enable awaited — good.

Null-guards on session/domains and synchronous wait on Network.Enable() prevent races and swallowed errors. Approved.


11869-11877: Guarded DevTools teardown — good.

Null-checks before Disable/Dispose and closing the session safely will avoid NREs during cleanup.


11751-11763: Ignore suggestion to replace Urls = []: The GingerCoreNET project’s csproj sets <LangVersion>preview</LangVersion>, enabling C# 12 collection expressions ([]); no change needed.

Likely an incorrect or invalid review comment.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch Beta/BugFix/SeleniumDriverUpgrade

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbit in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbit in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbit gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbit read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbit help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbit ignore or @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbit summary or @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbit or @coderabbitai title anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
Ginger/Ginger/WizardLib/WizardWindow.xaml.cs (2)

162-181: Navigation gating ignores AI processing state—block when xAIProcessingText is visible.

Now that AI flows only toggle the text, users can navigate while processing. Include the text control in the checks.

-            if (xProcessingImage.Visibility == Visibility.Visible)
+            if (xProcessingImage.Visibility == Visibility.Visible || xAIProcessingText.Visibility == Visibility.Visible)
             {
                 Reporter.ToUser(eUserMsgKey.WizardCantMoveWhileInProcess, "Next");
             }

Apply the same change in Prev, Cancel, and Finish click handlers.

Also applies to: 296-303, 313-316, 339-345


456-479: Timer lifecycle: guard against double-start and detach handler on stop.

Repeated AIProcessStarted calls can stack timers. Stop/dispose previous before starting a new one; detach handler when stopping.

         private void StartAIFineTuneTimer()
         {
+            // Stop previous timer if any
+            if (AIFineTunetimer != null)
+            {
+                try { AIFineTunetimer.Stop(); AIFineTunetimer.Tick -= AIFineTuneTimer_Tick; }
+                catch { /* ignore */ }
+            }
             // Create and configure the DispatcherTimer
             AIFineTunetimer = new DispatcherTimer
             {
                 Interval = TimeSpan.FromSeconds(1) // Update every second
             };
             AIFineTunetimer.Tick += AIFineTuneTimer_Tick;
@@
         private void AIFineTuneStopTimer()
         {
             if (AIFineTunetimer != null)
             {
                 try
                 {
-                    AIFineTunetimer.Stop();
+                    AIFineTunetimer.Stop();
+                    AIFineTunetimer.Tick -= AIFineTuneTimer_Tick;
                     // Reset label to base text when stopping
                     if (!string.IsNullOrWhiteSpace(AIFineTuneBaseText))
                     {
                         xAIProcessingText.Text = AIFineTuneBaseText;
                     }
                 }
                 catch (Exception ex)
                 {
                     Reporter.ToLog(eLogLevel.DEBUG, "Error while stopping the timer", ex);
                 }
+                finally
+                {
+                    AIFineTunetimer = null;
+                }
             }
         }

Also applies to: 491-509

Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMUtils.cs (3)

101-108: Avoid Convert.ToInt32 on arbitrary config; validate and clamp batch size.

Invalid or tiny values will throw or degrade. Use TryParse with sane minimum.

-            batchSize = !string.IsNullOrEmpty(GingerCoreNET.GeneralLib.General.GetAIBatchsize()) ? Convert.ToInt32(GingerCoreNET.GeneralLib.General.GetAIBatchsize()) : batchSize;
+            var cfg = GingerCoreNET.GeneralLib.General.GetAIBatchsize();
+            if (!string.IsNullOrWhiteSpace(cfg) && int.TryParse(cfg, out var parsed) && parsed > 0)
+            {
+                // enforce a lower bound to avoid excessive calls
+                batchSize = Math.Max(parsed, 512);
+            }

190-198: Possible NRE: ToString() on null JToken.

jObject["data"]?["genai_result"] can be null; calling ToString() will throw. Check token first.

-                        var jObject = JObject.Parse(cleanedResponse);
-                        var genaiResultToken = jObject["data"]?["genai_result"].ToString();
-                        if (genaiResultToken != null)
+                        var jObject = JObject.Parse(cleanedResponse);
+                        var genaiResultToken = jObject["data"]?["genai_result"];
+                        if (genaiResultToken != null)
                         {
-                            responseElements = JsonConvert.DeserializeObject<List<ElementWrapper>>((string)genaiResultToken);
+                            responseElements = JsonConvert.DeserializeObject<List<ElementWrapper>>(genaiResultToken.ToString());
                         }
                         else
                         {
                             responseElements = JsonConvert.DeserializeObject<List<ElementWrapper>>(cleanedResponse);
                         }

241-264: De-dup locators and consider LearnedType semantics.

Prevent duplicates and avoid setting both IsAutoLearned and IsAIGenerated; LearnedType will show AI if IsAIGenerated is true.

-                                        if(!string.IsNullOrEmpty(kvp.Value))
+                                        if (!string.IsNullOrEmpty(kvp.Value))
                                         {
-                                            var locator = new ElementLocator
+                                            // skip duplicates
+                                            bool exists = existingElement.Locators.Any(l =>
+                                                l.LocateBy == locateBy &&
+                                                string.Equals(l.LocateValue, kvp.Value, StringComparison.Ordinal));
+                                            if (exists) { continue; }
+
+                                            var locator = new ElementLocator
                                             {
                                                 LocateBy = locateBy,
                                                 LocateValue = kvp.Value,
-                                                IsAutoLearned = true,
+                                                IsAutoLearned = false,
                                                 Category = PomCategory,
                                                 IsAIGenerated = true,
                                                 Active = true
                                             };
                                             existingElement.Locators.Add(locator);
                                         }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between fdeb27b and 31347dd.

📒 Files selected for processing (13)
  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml (3 hunks)
  • Ginger/Ginger/ApplicationModelsLib/POMModels/PomElementsPage.xaml (0 hunks)
  • Ginger/Ginger/ApplicationModelsLib/POMModels/PomElementsPage.xaml.cs (1 hunks)
  • Ginger/Ginger/UserControlsLib/UCElementDetails.xaml (0 hunks)
  • Ginger/Ginger/WizardLib/WizardWindow.xaml (1 hunks)
  • Ginger/Ginger/WizardLib/WizardWindow.xaml.cs (2 hunks)
  • Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (1 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMUtils.cs (7 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (5 hunks)
  • Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs (2 hunks)
  • Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs (0 hunks)
  • Ginger/GingerCoreNET/GeneralLib/General.cs (2 hunks)
  • Ginger/GingerCoreNET/GingerCoreNET.csproj (1 hunks)
💤 Files with no reviewable changes (3)
  • Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs
  • Ginger/Ginger/UserControlsLib/UCElementDetails.xaml
  • Ginger/Ginger/ApplicationModelsLib/POMModels/PomElementsPage.xaml
🧰 Additional context used
🧠 Learnings (8)
📚 Learning: 2025-07-16T14:42:32.229Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4254
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs:70-73
Timestamp: 2025-07-16T14:42:32.229Z
Learning: In Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs, prashelke prefers to keep the current `!WorkSpace.Instance.BetaFeatures.ShowPOMForAI` logic for binding and showing AI POM controls, rather than changing it to positive logic.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml
  • Ginger/Ginger/WizardLib/WizardWindow.xaml
  • Ginger/Ginger/ApplicationModelsLib/POMModels/PomElementsPage.xaml.cs
📚 Learning: 2025-08-22T14:57:03.711Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4280
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml:71-103
Timestamp: 2025-08-22T14:57:03.711Z
Learning: In Ginger POM wizard, prashelke prefers to show AI-powered features as visible to users but disabled by default (Visibility="Visible", IsEnabled="False") to promote feature discoverability rather than hiding them completely. Users should be able to see what AI capabilities are available even when not yet enabled.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml
📚 Learning: 2025-08-22T16:53:46.055Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4280
File: Ginger/Ginger/WizardLib/WizardWindow.xaml:141-149
Timestamp: 2025-08-22T16:53:46.055Z
Learning: In the Ginger WPF application, dynamic text resources like "AI_FineTuning_Processing_Text" are not present in the resource dictionaries, so hard-coded text should be used as fallback when localization resources are not available.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml
📚 Learning: 2025-06-16T10:37:13.073Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:19-22
Timestamp: 2025-06-16T10:37:13.073Z
Learning: In Ginger codebase, both `using amdocs.ginger.GingerCoreNET;` and `using Amdocs.Ginger.CoreNET;` are valid and serve different purposes. The first (lowercase) contains the WorkSpace class and related workspace functionality, while the second (proper case) contains drivers like GenericAppiumDriver and other core functionality. Both may be required in files that use types from both namespaces.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-07-26T22:04:12.930Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1123-1126
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has removed an unnecessary empty line at 1123 in `WindowExplorerPage.xaml.cs` for better code compactness.

Applied to files:

  • Ginger/Ginger/WizardLib/WizardWindow.xaml
📚 Learning: 2025-04-25T13:29:45.059Z
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4188
File: Ginger/GingerCoreNET/RunLib/CLILib/DoOptionsHanlder.cs:22-23
Timestamp: 2025-04-25T13:29:45.059Z
Learning: The `using Amdocs.Ginger.Repository;` statement in Ginger/GingerCoreNET/RunLib/CLILib/DoOptionsHanlder.cs is necessary as it provides access to the `ObservableList<>` class which is used throughout the file for collections of RunSetConfig, AnalyzerItemBase, and ApplicationPOMModel objects.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMUtils.cs
📚 Learning: 2025-06-16T09:52:40.873Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:19-22
Timestamp: 2025-06-16T09:52:40.873Z
Learning: The `GenericAppiumDriver` class is located in the `Amdocs.Ginger.CoreNET` namespace, not in a namespace that matches its file path structure. File paths don't always correspond to namespace declarations in this codebase.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMUtils.cs
📚 Learning: 2025-04-25T13:29:45.059Z
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4188
File: Ginger/GingerCoreNET/RunLib/CLILib/DoOptionsHanlder.cs:22-23
Timestamp: 2025-04-25T13:29:45.059Z
Learning: The `using Amdocs.Ginger.Repository;` statement in Ginger/GingerCoreNET/RunLib/CLILib/DoOptionsHanlder.cs is necessary as it imports the ObservableList<> class which is used throughout the file.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMUtils.cs
🧬 Code graph analysis (5)
Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs (1)
Ginger/GingerCoreNET/GeneralLib/General.cs (1)
  • GetAIBatchsize (1481-1484)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)
Ginger/GingerCoreCommon/Actions/Web/ActBrowserElement.cs (1)
  • ActBrowserElement (32-402)
Ginger/GingerCoreNET/GeneralLib/General.cs (1)
Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs (2)
  • GetAIBatchsize (251-254)
  • GingerPlayEndPointManager (27-255)
Ginger/Ginger/ApplicationModelsLib/POMModels/PomElementsPage.xaml.cs (1)
Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (1)
  • ElementLocator (25-196)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMUtils.cs (3)
Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs (1)
  • ElementwrapperProperties (47-105)
Ginger/GingerCoreNET/GeneralLib/General.cs (2)
  • General (59-1487)
  • GetAIBatchsize (1481-1484)
Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (1)
  • ElementLocator (25-196)
🔇 Additional comments (5)
Ginger/GingerCoreNET/GingerCoreNET.csproj (1)

335-336: Update DevTools usage for Selenium 4.35.0

  • Remove version-specific DevTools typed namespace aliases in Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:79-80 (currently pointing to OpenQA.Selenium.DevTools.V139) and switch to dynamic DevToolsSession domains per the latest API.
  • Verify all GetDevToolsSession() calls match the updated method signature in Selenium.WebDriver 4.35.0.
  • No changes needed for Selenium.Support references—OpenQA.Selenium.Support.UI usages confirm the package is required.
⛔ Skipped due to learnings
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4249
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:4684-4695
Timestamp: 2025-07-10T07:11:28.974Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, attribute values used in CSS selectors (e.g., ByTitle, ByAriaLabel, ByDataTestId, ByPlaceholder) should be escaped using a helper method (such as EscapeCssAttributeValue) to prevent selector breakage due to special characters.
Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml (2)

71-71: Good UX: tooltip clarifies prerequisites.

Aligned with your preference to keep AI features visible but disabled by default.


85-96: Label/content rename is clear and consistent.

No behavior change; reads better.

Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)

11810-11813: Good: Disable() awaited and session disposed.

Awaiting Network.Disable and closing the DevTools session is correct and consistent with the API. (selenium.dev)

Ginger/GingerCoreNET/GeneralLib/General.cs (1)

52-52: OK: add System.Text.Json.

Needed for the JsonSerializer usage in this class.

Comment thread Ginger/Ginger/WizardLib/WizardWindow.xaml
Comment thread Ginger/Ginger/WizardLib/WizardWindow.xaml
Comment thread Ginger/Ginger/WizardLib/WizardWindow.xaml.cs
Comment thread Ginger/GingerCoreCommon/UIElement/ElementLocator.cs
Comment thread Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs Outdated
Comment thread Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs Outdated
Comment thread Ginger/GingerCoreNET/GeneralLib/General.cs
Comment thread Ginger/GingerCoreNET/GingerCoreNET.csproj

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml (1)

93-101: Gate enablement via feature flags, not hardcoded
POMLearnConfigWizardPage.xaml (lines 93–101): replace IsEnabled="False" on the xLearnPOMByAI CheckBox with a binding to the runtime flags (e.g. WorkSpace.Instance.BetaFeatures.ShowPOMForAI and your Ginger Play configuration status) so it only enables when both are true.

♻️ Duplicate comments (2)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)

11640-11645: Good await on Network.Enable; add defensive guards for devtools availability.

Avoids flaky races; consider an early skip when DevTools session/domains aren’t available to prevent null dereferences on odd drivers.

-                    devToolsSession = devTools.GetDevToolsSession();
-                    devToolsDomains = devToolsSession.GetVersionSpecificDomains<DevToolsDomains>();
+                    if (devTools == null)
+                    {
+                        mAct.ExInfo = $"DevTools not available for {mBrowserType}; skipping {mAct?.ControlAction}.";
+                        mAct.Status = Amdocs.Ginger.CoreNET.Execution.eRunStatus.Skipped;
+                        return;
+                    }
+                    devToolsSession = devTools.GetDevToolsSession();
+                    devToolsDomains = devToolsSession.GetVersionSpecificDomains<DevToolsDomains>();
+                    if (devToolsDomains == null)
+                    {
+                        Reporter.ToLog(eLogLevel.WARN, "DevTools V139 domains unavailable; skipping operation.");
+                        mAct.Status = Amdocs.Ginger.CoreNET.Execution.eRunStatus.Skipped;
+                        return;
+                    }
Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs (1)

43-44: Optional: expose a typed accessor for safer consumers.

Repeated from earlier feedback; fine to keep string API, but a typed TryGet helps avoid scattered parsing and bad defaults.

public static bool TryGetAIBatchSize(out int batchSize)
{
    if (int.TryParse(AIBatchSize, out var v) && v > 0)
    {
        batchSize = v;
        return true;
    }
    batchSize = 0;
    return false;
}

Also applies to: 251-254

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 31347dd and 1acef02.

📒 Files selected for processing (4)
  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml (3 hunks)
  • Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (2 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (5 hunks)
  • Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs (2 hunks)
🧰 Additional context used
🧠 Learnings (7)
📚 Learning: 2025-07-16T14:42:32.229Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4254
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs:70-73
Timestamp: 2025-07-16T14:42:32.229Z
Learning: In Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs, prashelke prefers to keep the current `!WorkSpace.Instance.BetaFeatures.ShowPOMForAI` logic for binding and showing AI POM controls, rather than changing it to positive logic.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml
📚 Learning: 2025-08-22T14:57:03.711Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4280
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml:71-103
Timestamp: 2025-08-22T14:57:03.711Z
Learning: In Ginger POM wizard, prashelke prefers to show AI-powered features as visible to users but disabled by default (Visibility="Visible", IsEnabled="False") to promote feature discoverability rather than hiding them completely. Users should be able to see what AI capabilities are available even when not yet enabled.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml
📚 Learning: 2025-08-26T07:40:08.345Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4285
File: Ginger/Ginger/Actions/ActionEditPages/ActSecurityTestingEditPage.xaml:23-23
Timestamp: 2025-08-26T07:40:08.345Z
Learning: In the Ginger codebase ActSecurityTestingEditPage.xaml file, the large bottom margin of 530 on the "Acceptable Alerts" label (Margin="10,10,0,530") is intentional design choice, not an error.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml
📚 Learning: 2025-08-25T09:27:30.249Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4281
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1433-1441
Timestamp: 2025-08-25T09:27:30.249Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, SetProxy(dynamic options) should not force options.AcceptInsecureCertificates = false. Only set AcceptInsecureCertificates = true when UseZAP is enabled to avoid breaking setups that permit self-signed/dev certificates.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-12-04T11:45:57.024Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4017
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:11096-11096
Timestamp: 2024-12-04T11:45:57.024Z
Learning: In the `OnNetworkRequestSent` method in `SeleniumDriver.cs`, adding a null check for `_BrowserHelper` is not necessary.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-07-10T07:11:28.974Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4249
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:4684-4695
Timestamp: 2025-07-10T07:11:28.974Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, attribute values used in CSS selectors (e.g., ByTitle, ByAriaLabel, ByDataTestId, ByPlaceholder) should be escaped using a helper method (such as EscapeCssAttributeValue) to prevent selector breakage due to special characters.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-06-16T10:37:13.073Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:19-22
Timestamp: 2025-06-16T10:37:13.073Z
Learning: In Ginger codebase, both `using amdocs.ginger.GingerCoreNET;` and `using Amdocs.Ginger.CoreNET;` are valid and serve different purposes. The first (lowercase) contains the WorkSpace class and related workspace functionality, while the second (proper case) contains drivers like GenericAppiumDriver and other core functionality. Both may be required in files that use types from both namespaces.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
🧬 Code graph analysis (2)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)
Ginger/GingerCoreCommon/Actions/Web/ActBrowserElement.cs (1)
  • ActBrowserElement (32-402)
Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs (1)
Ginger/GingerCoreNET/GeneralLib/General.cs (1)
  • GetAIBatchsize (1481-1484)
🔇 Additional comments (5)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (3)

79-80: CDP v139 aliases look correct.

Using typed DevTools V139 domains is aligned with the Selenium upgrade. No action needed.


4642-4642: Whitespace-only change.

No functional impact; ignoring.


11699-11704: Awaiting SetBlockedURLs is the right fix.

Deterministic ordering and surfaced errors without the arbitrary sleep. LGTM.

Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (1)

63-67: Good: LearnedType now refreshes when flags change.

Raising PropertyChanged for LearnedType in both IsAutoLearned and IsAIGenerated setters is correct and fixes stale UI.

Also applies to: 176-180

Ginger/GingerCoreNET/External/GingerPlay/GingerPlayEndPointManager.cs (1)

43-44: Trim AIBatchSize at load time to guard against whitespace-only entries
Avoid downstream FormatException when the config value contains only whitespace (numeric strings with surrounding whitespace still parse correctly).

-        private static readonly string AIBatchSize = System.Configuration.ConfigurationManager.AppSettings["AIBatchSize"]?.ToString() ?? "2000";
+        private static readonly string AIBatchSize =
+            ((System.Configuration.ConfigurationManager.AppSettings["AIBatchSize"]?.ToString()) ?? "2000").Trim();

Comment thread Ginger/GingerCoreCommon/UIElement/ElementLocator.cs Outdated
Comment thread Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (3)
Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (2)

63-67: Also raise PropertyChanged for LearnedTypeEnum.

You correctly notify for LearnedType; include LearnedTypeEnum to keep enum bindings (present/future) in sync.

-        public bool IsAutoLearned
-        {
-            get { return mIsAutoLearned; }
-            set { if (mIsAutoLearned != value) { mIsAutoLearned = value; OnPropertyChanged(nameof(IsAutoLearned)); OnPropertyChanged(nameof(LearnedType)); } }
-        }
+        public bool IsAutoLearned
+        {
+            get { return mIsAutoLearned; }
+            set
+            {
+                if (mIsAutoLearned != value)
+                {
+                    mIsAutoLearned = value;
+                    OnPropertyChanged(nameof(IsAutoLearned));
+                    OnPropertyChanged(nameof(LearnedType));
+                    OnPropertyChanged(nameof(LearnedTypeEnum));
+                }
+            }
+        }

178-180: Mirror the enum notification here as well.

Same rationale as above; add LearnedTypeEnum change notification.

-        public bool IsAIGenerated { get { return mIsAIGenerated; } set { if (mIsAIGenerated != value) { mIsAIGenerated = value; OnPropertyChanged(nameof(IsAIGenerated)); OnPropertyChanged(nameof(LearnedType)); } } }
+        public bool IsAIGenerated
+        {
+            get { return mIsAIGenerated; }
+            set
+            {
+                if (mIsAIGenerated != value)
+                {
+                    mIsAIGenerated = value;
+                    OnPropertyChanged(nameof(IsAIGenerated));
+                    OnPropertyChanged(nameof(LearnedType));
+                    OnPropertyChanged(nameof(LearnedTypeEnum));
+                }
+            }
+        }
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)

79-80: CDP v139 aliasing OK; consider explicit alias names (optional).

Aliases work; if you want extra clarity, rename to DevToolsV139Domains/DevToolsV139.

-using DevToolsDomains = OpenQA.Selenium.DevTools.V139.DevToolsSessionDomains;
-using DevToolsVersion = OpenQA.Selenium.DevTools.V139;
+using DevToolsV139Domains = OpenQA.Selenium.DevTools.V139.DevToolsSessionDomains;
+using DevToolsV139 = OpenQA.Selenium.DevTools.V139;
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 1acef02 and c2fa7fc.

📒 Files selected for processing (2)
  • Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (2 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (5 hunks)
🧰 Additional context used
🧠 Learnings (5)
📚 Learning: 2025-08-25T09:27:30.249Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4281
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1433-1441
Timestamp: 2025-08-25T09:27:30.249Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, SetProxy(dynamic options) should not force options.AcceptInsecureCertificates = false. Only set AcceptInsecureCertificates = true when UseZAP is enabled to avoid breaking setups that permit self-signed/dev certificates.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-12-04T11:45:57.024Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4017
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:11096-11096
Timestamp: 2024-12-04T11:45:57.024Z
Learning: In the `OnNetworkRequestSent` method in `SeleniumDriver.cs`, adding a null check for `_BrowserHelper` is not necessary.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-07-10T07:11:28.974Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4249
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:4684-4695
Timestamp: 2025-07-10T07:11:28.974Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, attribute values used in CSS selectors (e.g., ByTitle, ByAriaLabel, ByDataTestId, ByPlaceholder) should be escaped using a helper method (such as EscapeCssAttributeValue) to prevent selector breakage due to special characters.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-06-16T10:37:13.073Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:19-22
Timestamp: 2025-06-16T10:37:13.073Z
Learning: In Ginger codebase, both `using amdocs.ginger.GingerCoreNET;` and `using Amdocs.Ginger.CoreNET;` are valid and serve different purposes. The first (lowercase) contains the WorkSpace class and related workspace functionality, while the second (proper case) contains drivers like GenericAppiumDriver and other core functionality. Both may be required in files that use types from both namespaces.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-07-16T14:42:32.229Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4254
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs:70-73
Timestamp: 2025-07-16T14:42:32.229Z
Learning: In Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs, prashelke prefers to keep the current `!WorkSpace.Instance.BetaFeatures.ShowPOMForAI` logic for binding and showing AI POM controls, rather than changing it to positive logic.

Applied to files:

  • Ginger/GingerCoreCommon/UIElement/ElementLocator.cs
🧬 Code graph analysis (1)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)
Ginger/GingerCoreCommon/Actions/Web/ActBrowserElement.cs (1)
  • ActBrowserElement (32-402)
🔇 Additional comments (4)
Ginger/GingerCoreCommon/UIElement/ElementLocator.cs (1)

182-196: Enum + consolidated LearnedType: LGTM.

Clear precedence (AI > Auto > Manual) and non-breaking string property. Good upgrade for UI binding.

Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (3)

4642-4642: No functional change here.

Whitespace-only change; nothing to do.


11699-11704: Awaiting SetBlockedURLs is correct.

This removes race conditions and makes behavior deterministic.


11809-11818: Teardown guards look good.

Null-checks and disposing the session prevent NREs during cleanup.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)

4373-4450: Guard against malformed/empty POM key to avoid exceptions

GetCurrentPOM constructs POMExecutionUtils with whatever RetrieveActionValue(act) returns. If this is null/empty or not in the expected "POMGUID_ElementGUID" shape, downstream code can throw (e.g., .ToString() on null or new Guid(...) on bad input). Add a defensive check and structured logging.

Apply:

-        private static void GetCurrentPOM(Act act, out POMExecutionUtils pomExcutionUtil, out ApplicationPOMModel currentPOM)
-        {
-            pomExcutionUtil = new POMExecutionUtils(act, RetrieveActionValue(act));
-            currentPOM = pomExcutionUtil.GetCurrentPOM();
-        }
+        private static void GetCurrentPOM(Act act, out POMExecutionUtils pomExcutionUtil, out ApplicationPOMModel currentPOM)
+        {
+            pomExcutionUtil = null;
+            currentPOM = null;
+            var pomKey = RetrieveActionValue(act);
+            if (string.IsNullOrWhiteSpace(pomKey) || !pomKey.Contains("_"))
+            {
+                Reporter.ToLog(eLogLevel.WARN, $"POM key is missing or malformed for action '{act?.Description}'. Expected 'POMGUID_ElementGUID', got '{pomKey ?? "<null>"}'.");
+                return;
+            }
+            try
+            {
+                pomExcutionUtil = new POMExecutionUtils(act, pomKey);
+                currentPOM = pomExcutionUtil.GetCurrentPOM();
+            }
+            catch (Exception ex)
+            {
+                Reporter.ToLog(eLogLevel.ERROR, "Failed to resolve current POM from action.", ex);
+                pomExcutionUtil = null;
+                currentPOM = null;
+            }
+        }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between c2fa7fc and 461e85d.

📒 Files selected for processing (1)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (8 hunks)
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-08-25T09:27:30.249Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4281
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1433-1441
Timestamp: 2025-08-25T09:27:30.249Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, SetProxy(dynamic options) should not force options.AcceptInsecureCertificates = false. Only set AcceptInsecureCertificates = true when UseZAP is enabled to avoid breaking setups that permit self-signed/dev certificates.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-12-04T11:45:57.024Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4017
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:11096-11096
Timestamp: 2024-12-04T11:45:57.024Z
Learning: In the `OnNetworkRequestSent` method in `SeleniumDriver.cs`, adding a null check for `_BrowserHelper` is not necessary.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-07-10T07:11:28.974Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4249
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:4684-4695
Timestamp: 2025-07-10T07:11:28.974Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, attribute values used in CSS selectors (e.g., ByTitle, ByAriaLabel, ByDataTestId, ByPlaceholder) should be escaped using a helper method (such as EscapeCssAttributeValue) to prevent selector breakage due to special characters.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-06-16T10:37:13.073Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:19-22
Timestamp: 2025-06-16T10:37:13.073Z
Learning: In Ginger codebase, both `using amdocs.ginger.GingerCoreNET;` and `using Amdocs.Ginger.CoreNET;` are valid and serve different purposes. The first (lowercase) contains the WorkSpace class and related workspace functionality, while the second (proper case) contains drivers like GenericAppiumDriver and other core functionality. Both may be required in files that use types from both namespaces.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
🧬 Code graph analysis (1)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (2)
Ginger/GingerCoreNET/Application Models/Execution/POM/POMExecutionUtils.cs (8)
  • POMExecutionUtils (34-530)
  • POMExecutionUtils (39-50)
  • POMExecutionUtils (52-55)
  • POMExecutionUtils (57-61)
  • ApplicationPOMModel (65-77)
  • ElementInfo (79-98)
  • ElementInfo (100-128)
  • ElementInfo (130-141)
Ginger/GingerCoreCommon/Repository/ApplicationModelLib/POMModelLib/ApplicationPOMModel.cs (2)
  • ApplicationPOMModel (39-386)
  • ApplicationPOMModel (41-44)
🔇 Additional comments (4)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (4)

79-80: CDP v139 aliasing: OK

Aliases point to V139 as intended. No further action.


4648-4648: No-op whitespace change

Nothing to address.


11854-11863: DevTools teardown null-guard: OK

Properly avoids NREs during cleanup. Nothing else to change.


11673-11690: Remove redundant devTools null check
The if (webDriver is ChromiumDriver) guard ensures devTools = webDriver as IDevTools can never be null (all ChromiumDriver instances implement IDevTools), so the suggested null-check before devTools.GetDevToolsSession() is unnecessary.

Likely an incorrect or invalid review comment.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Ginger/Ginger/ApplicationModelsLib/POMModels/PomAllElementsPage.xaml.cs (1)

420-438: Move FontWeight assignment into the if/else so only the selected tab is bold
Currently FontWeights.Bold is applied unconditionally after the if/else, causing all tabs to render bold. Assign FontWeights.Bold for the selected tab and FontWeights.Normal for others:

-                                if (xPOMModelTabs.SelectedItem == tab)
-                                {
-                                    ((TextBlock)ctrl).Foreground = (SolidColorBrush)FindResource("$SelectionColor_Pink");
-                                }
-                                else
-                                {
-                                    ((TextBlock)ctrl).Foreground = (SolidColorBrush)FindResource("$PrimaryColor_Black");
-                                } ((TextBlock)ctrl).FontWeight = FontWeights.Bold;
+                                if (xPOMModelTabs.SelectedItem == tab)
+                                {
+                                    ((TextBlock)ctrl).Foreground = (SolidColorBrush)FindResource("$SelectionColor_Pink");
+                                    ((TextBlock)ctrl).FontWeight = FontWeights.Bold;
+                                }
+                                else
+                                {
+                                    ((TextBlock)ctrl).Foreground = (SolidColorBrush)FindResource("$PrimaryColor_Black");
+                                    ((TextBlock)ctrl).FontWeight = FontWeights.Normal;
+                                }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 461e85d and f7898c9.

📒 Files selected for processing (2)
  • Ginger/Ginger/ApplicationModelsLib/POMModels/PomAllElementsPage.xaml.cs (1 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (9 hunks)
🧰 Additional context used
🧠 Learnings (11)
📚 Learning: 2024-07-26T22:04:12.930Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1123-1126
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has removed an unnecessary empty line at 1123 in `WindowExplorerPage.xaml.cs` for better code compactness.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/PomAllElementsPage.xaml.cs
📚 Learning: 2025-07-16T14:42:32.229Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4254
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs:70-73
Timestamp: 2025-07-16T14:42:32.229Z
Learning: In Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/POMLearnConfigWizardPage.xaml.cs, prashelke prefers to keep the current `!WorkSpace.Instance.BetaFeatures.ShowPOMForAI` logic for binding and showing AI POM controls, rather than changing it to positive logic.

Applied to files:

  • Ginger/Ginger/ApplicationModelsLib/POMModels/PomAllElementsPage.xaml.cs
📚 Learning: 2025-08-25T09:27:30.249Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4281
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1433-1441
Timestamp: 2025-08-25T09:27:30.249Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, SetProxy(dynamic options) should not force options.AcceptInsecureCertificates = false. Only set AcceptInsecureCertificates = true when UseZAP is enabled to avoid breaking setups that permit self-signed/dev certificates.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-07-10T07:11:28.974Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4249
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:4684-4695
Timestamp: 2025-07-10T07:11:28.974Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, attribute values used in CSS selectors (e.g., ByTitle, ByAriaLabel, ByDataTestId, ByPlaceholder) should be escaped using a helper method (such as EscapeCssAttributeValue) to prevent selector breakage due to special characters.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-12-04T11:45:57.024Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4017
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:11096-11096
Timestamp: 2024-12-04T11:45:57.024Z
Learning: In the `OnNetworkRequestSent` method in `SeleniumDriver.cs`, adding a null check for `_BrowserHelper` is not necessary.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-06-24T06:08:31.804Z
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4242
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:623-656
Timestamp: 2025-06-24T06:08:31.804Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs, the CSS selector construction by directly interpolating user input values in the GetElementLocator method is considered acceptable by the team and working as expected for their use cases.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-07-16T14:17:56.429Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4254
File: Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs:89-93
Timestamp: 2025-07-16T14:17:56.429Z
Learning: In Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs, the user prashelke prefers to keep the current casing for properties `insideIframe` and `insideShadowDOM` in the `ElementwrapperContext` class rather than changing them to PascalCase.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-08-22T16:22:20.870Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4280
File: Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs:41-41
Timestamp: 2025-08-22T16:22:20.870Z
Learning: In Ginger/GingerCoreNET/GeneralLib/ElementWrapperInfo.cs, the user prashelke prefers to keep the current lowercase naming for properties like `elementGuid` rather than changing them to PascalCase, likely for consistency within the ElementWrapperInfo data model classes.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2024-06-12T12:54:44.221Z
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3753
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:99-99
Timestamp: 2024-06-12T12:54:44.221Z
Learning: User IamRanjeetSingh prefers exceptions to propagate rather than being caught and handled locally within methods in `PlaywrightBrowserTab.cs`.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-08-25T09:20:17.608Z
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4281
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1958-1970
Timestamp: 2025-08-25T09:20:17.608Z
Learning: In Ginger security testing, passive ZAP scans should be invoked with an empty testURL (ActSecurityTesting.ExecutePassiveZapScan("", act)) to aggregate alerts across the entire ZAP session. Passing a URL scopes results to that base URL. Only the active scan path should pass Driver.Url, with null/empty checks. Context: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs :: ActSecurity. Confirmed by AmanPrasad43 in PR #4281.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
📚 Learning: 2025-06-16T10:37:13.073Z
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:19-22
Timestamp: 2025-06-16T10:37:13.073Z
Learning: In Ginger codebase, both `using amdocs.ginger.GingerCoreNET;` and `using Amdocs.Ginger.CoreNET;` are valid and serve different purposes. The first (lowercase) contains the WorkSpace class and related workspace functionality, while the second (proper case) contains drivers like GenericAppiumDriver and other core functionality. Both may be required in files that use types from both namespaces.

Applied to files:

  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
🧬 Code graph analysis (1)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (5)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs (11)
  • OpenQA (1925-1928)
  • Act (429-513)
  • ElementInfo (757-834)
  • ElementInfo (1254-1287)
  • ElementInfo (1298-1343)
  • ElementInfo (1389-1400)
  • ElementInfo (1402-1407)
  • ElementInfo (1409-1417)
  • ElementInfo (1433-1478)
  • ElementInfo (1528-1557)
  • ElementInfo (1559-1588)
Ginger/GingerCoreNET/Application Models/Execution/POM/POMExecutionUtils.cs (8)
  • POMExecutionUtils (34-530)
  • POMExecutionUtils (39-50)
  • POMExecutionUtils (52-55)
  • POMExecutionUtils (57-61)
  • ApplicationPOMModel (65-77)
  • ElementInfo (79-98)
  • ElementInfo (100-128)
  • ElementInfo (130-141)
Ginger/GingerCoreCommon/Repository/ApplicationModelLib/POMModelLib/ApplicationPOMModel.cs (2)
  • ApplicationPOMModel (39-386)
  • ApplicationPOMModel (41-44)
Ginger/GingerCoreCommon/ReporterLib/Reporter.cs (1)
  • Reporter (28-357)
Ginger/GingerCoreCommon/Actions/Act.cs (1)
  • AddOrUpdateReturnParamActual (1308-1335)
🔇 Additional comments (3)
Ginger/Ginger/ApplicationModelsLib/POMModels/PomAllElementsPage.xaml.cs (1)

167-169: Verify use of IsAutoLearned given new LearnedType model

The PR summary indicates a shift to a unified LearnedType. This file still toggles ElementInfo.IsAutoLearned. Please confirm that:

  • IsAutoLearned is still authoritative, or
  • These sites should instead initialize the new LearnedType on the relevant entity (ElementLocator/ElementInfo) to “AI”.

If the latter, update these assignments accordingly to keep UI/logic consistent with PomElementsPage and ElementLocator changes.

Also applies to: 244-246

Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (2)

79-80: CDP v139 aliasing looks good.

The versioned DevTools aliases are correct and consistent with the rest of the changes.


11868-11877: Hardened DevTools teardown looks correct.

Null-guards on devToolsDomains and safe disposal of the session prevent cleanup-time NREs.

Comment thread Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs Outdated
@Maheshkale447
Maheshkale447 merged commit 10d2509 into Releases/Beta Aug 29, 2025
5 checks passed
@Maheshkale447
Maheshkale447 deleted the Beta/BugFix/SeleniumDriverUpgrade branch August 29, 2025 10:29
@coderabbitai coderabbitai Bot mentioned this pull request Sep 4, 2025
15 tasks
@coderabbitai coderabbitai Bot mentioned this pull request Nov 21, 2025
15 tasks
@coderabbitai coderabbitai Bot mentioned this pull request Mar 11, 2026
15 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants