Skip to content

Added common method to take screen-shot of element for web and mobile…#4247

Merged
Maheshkale447 merged 5 commits into
masterfrom
Feature/WebPOMEnhancement
Jul 10, 2025
Merged

Added common method to take screen-shot of element for web and mobile…#4247
Maheshkale447 merged 5 commits into
masterfrom
Feature/WebPOMEnhancement

Conversation

@prashelke

@prashelke prashelke commented Jul 7, 2025

Copy link
Copy Markdown
Contributor

… application

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

    • Enhanced element discovery by allowing an optional screenshot to be passed when retrieving visible controls. This enables more advanced handling of UI element screenshots during the learning process.
  • Refactor

    • Streamlined screenshot handling logic for UI elements, centralizing image cropping and extraction functionality.
    • Improved code maintainability by removing redundant methods and updating method signatures to support the new screenshot parameter.

@coderabbitai

coderabbitai Bot commented Jul 7, 2025

Copy link
Copy Markdown
Contributor

"""

Walkthrough

This change updates the GetVisibleControls method in the IWindowExplorer interface and all its implementing classes to accept an additional optional Bitmap ScreenShot parameter. Related method calls and internal screenshot logic are refactored to use a new shared utility for cropping element screenshots, with redundant private methods removed and new utility methods added in a general library.

Changes

File(s) Change Summary
Ginger/GingerCoreCommon/UIElement/IWindowExplorer.cs Added optional Bitmap ScreenShot parameter to GetVisibleControls in the interface.
Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs
.../InternalBrowserLib/InternalBrowser.cs
.../JavaDriverLib/JavaDriver.cs
.../PBDriver/PBDriver.cs
.../WindowsLib/WindowsDriver.cs
.../MainFrame/MainFrameDriver.cs
.../Web/Playwright/PlaywrightDriver.cs
Updated GetVisibleControls to match new interface with Bitmap ScreenShot parameter.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs Propagated Bitmap ScreenShot parameter through element discovery methods and screenshot logic.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs Removed local screenshot cropping methods; refactored to use shared utility and new parameter.
Ginger/GingerCoreNET/GeneralLib/General.cs Added static methods: TakeElementScreenShot and GetLocationAndSizeOfElement.
Ginger/GingerCoreNET/GeneralLib/CommonLib.cs Added using directives for ElementInfo and System.Drawing.
Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs Updated calls to GetVisibleControls to pass the new ScreenShot parameter.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMLearner.cs Added Bitmap ScreenShot parameter to element learning methods and propagated it through calls.

Sequence Diagram(s)

sequenceDiagram
    participant Caller
    participant IWindowExplorer
    participant Driver
    participant GeneralLib

    Caller->>IWindowExplorer: GetVisibleControls(pomSetting, ..., ScreenShot)
    IWindowExplorer->>Driver: GetVisibleControls(pomSetting, ..., ScreenShot)
    alt If element screenshot needed
        Driver->>GeneralLib: TakeElementScreenShot(elementInfo, ScreenShot)
        GeneralLib-->>Driver: Cropped screenshot (Base64)
    end
    Driver-->>IWindowExplorer: List<ElementInfo>
    IWindowExplorer-->>Caller: List<ElementInfo>
Loading

Possibly related PRs

  • Ginger-Automation/Ginger#4222: Originally added the screenshot cropping methods now refactored in this PR, showing a direct code-level connection.
  • Ginger-Automation/Ginger#3836: Modifies GetVisibleControls and screenshot handling during element learning, directly related to screenshot parameter usage.
  • Ginger-Automation/Ginger#3783: Adds Playwright support and modifies GetVisibleControls method signatures, related at the method signature level.

Suggested reviewers

  • Maheshkale447

Poem

In the garden of code where the screenshots grow,
Rabbits hop softly, their whiskers aglow.
A bitmap now travels where elements hide,
Cropped by new methods, with logic as guide.
With every control that the window reveals,
The code hops ahead on its screenshot wheels!
🐇📸
"""


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c53de7b and 8fb8364.

📒 Files selected for processing (2)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMLearner.cs (9 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs (2 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActWebSmartSyncHandler.cs:137-150
Timestamp: 2025-01-30T07:38:05.310Z
Learning: In the Ginger automation framework, element existence checks using polling with 100ms delay is an acceptable approach, as confirmed by the maintainers.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs (9)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
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.941Z
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.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4169
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActUIElementHandler.cs:321-336
Timestamp: 2025-04-08T12:31:45.924Z
Learning: The GetTextLengthAsync method in Ginger Automation's Web driver should attempt to retrieve text from multiple sources (TextContent, InnerText, InputValue) to calculate text length, providing enhanced capabilities to read text length from different types of elements.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4249
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:7199-7202
Timestamp: 2025-07-10T07:12:52.753Z
Learning: In Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs, text values used in XPath expressions should be escaped using a helper method (such as EscapeXPathString) to handle single quotes and ensure valid XPath syntax.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1075-1083
Timestamp: 2025-01-30T09:07:12.356Z
Learning: In Playwright-based element wait operations (like WaitForElementsVisibleAsync), do not short-circuit when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1104-1143
Timestamp: 2025-01-31T13:25:31.910Z
Learning: In Playwright-based element wait operations (like WaitForElementsCheckedAsync), do not throw immediately when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3862
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightNonPersistentBrowser.cs:26-38
Timestamp: 2024-08-14T11:51:45.785Z
Learning: The use of `Task.Run` in the `PlaywrightNonPersistentBrowser` constructor is planned to be removed in future changes.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMLearner.cs (9)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.941Z
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4169
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActUIElementHandler.cs:321-336
Timestamp: 2025-04-08T12:31:45.924Z
Learning: The GetTextLengthAsync method in Ginger Automation's Web driver should attempt to retrieve text from multiple sources (TextContent, InnerText, InputValue) to calculate text length, providing enhanced capabilities to read text length from different types of elements.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4095
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1330-1333
Timestamp: 2025-02-11T13:45:38.303Z
Learning: The `SwitchToShadowDomAsync` method in PlaywrightBrowserTab class is intentionally implemented as a placeholder that returns true, with the actual shadow DOM handling logic to be implemented in the future.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1075-1083
Timestamp: 2025-01-30T09:07:12.356Z
Learning: In Playwright-based element wait operations (like WaitForElementsVisibleAsync), do not short-circuit when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1104-1143
Timestamp: 2025-01-31T13:25:31.910Z
Learning: In Playwright-based element wait operations (like WaitForElementsCheckedAsync), do not throw immediately when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3971
File: Ginger/GingerCoreNET/External/Katalon/Conversion/KatalonWebElementEntityToHTMLElementInfoConverter.cs:223-225
Timestamp: 2024-10-28T11:17:30.080Z
Learning: In the `Ginger/GingerCoreNET/External/Katalon/Conversion/KatalonWebElementEntityToHTMLElementInfoConverter.cs` file, when optional web element properties like `id` or `name` are not found during conversion, we should log warnings at `eLogLevel.WARN` level, as per the team's preference.
🔇 Additional comments (12)
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs (2)

898-898: LGTM! Clean implementation of the screenshot parameter enhancement.

The addition of the optional Bitmap ScreenShot = null parameter to the GetVisibleControls method signature is well-implemented. The parameter follows naming conventions, has an appropriate type for screenshot data, and uses a sensible default value that maintains backward compatibility.


924-924: Proper parameter forwarding to underlying implementation.

The ScreenShot parameter is correctly passed through to the LearnElementsAsync method using named parameter syntax, ensuring the screenshot functionality is properly integrated into the element learning pipeline.

Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/POM/POMLearner.cs (10)

79-82: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly added and propagated through the call chain.


84-87: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly added and propagated through the call chain.


89-89: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly added and propagated through the call chain.


107-107: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly passed to the CreateHTMLElementInfoAsync method.


123-123: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly propagated through the recursive call.


135-136: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly propagated to both shadow DOM and frame learning methods.


203-203: LGTM: Consistent parameter addition

The optional Bitmap ScreenShot parameter is properly added to the method signature.


810-838: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly added and propagated through the shadow DOM learning functionality.


840-877: LGTM: Consistent parameter addition and propagation

The optional Bitmap ScreenShot parameter is properly added and propagated through the frame learning functionality.


245-248: Confirmation: TakeElementScreenShot is robust and safe
The new utility method in General.cs includes:

  • Null checks for both fullImage and elementInfo, throwing ArgumentNullException as needed
  • Validation of crop dimensions (ArgumentException if ≤ 0)
  • Clamping to image bounds, logging a WARN and returning null for out-of-bounds regions
  • A try/catch that logs any exception at ERROR level and returns null

Its synchronous nature aligns with the offline POM-learning flow and shouldn’t block critical threads. We can monitor total runtime when capturing many elements, but no changes are required here.

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

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.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai 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:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

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

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai auto-generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai 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

Documentation and Community

  • 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: 4

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 777292a and cb106cb.

📒 Files selected for processing (13)
  • Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs (1 hunks)
  • Ginger/GingerCore/Drivers/InternalBrowserLib/InternalBrowser.cs (2 hunks)
  • Ginger/GingerCore/Drivers/JavaDriverLib/JavaDriver.cs (1 hunks)
  • Ginger/GingerCore/Drivers/MainFrame/MainFrameDriver.cs (1 hunks)
  • Ginger/GingerCore/Drivers/PBDriver/PBDriver.cs (1 hunks)
  • Ginger/GingerCore/Drivers/WindowsLib/WindowsDriver.cs (1 hunks)
  • Ginger/GingerCoreCommon/UIElement/IWindowExplorer.cs (2 hunks)
  • Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs (1 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs (2 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs (1 hunks)
  • Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (8 hunks)
  • Ginger/GingerCoreNET/GeneralLib/CommonLib.cs (2 hunks)
  • Ginger/GingerCoreNET/GeneralLib/General.cs (2 hunks)
🧰 Additional context used
🧠 Learnings (14)
📓 Common learnings
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActWebSmartSyncHandler.cs:137-150
Timestamp: 2025-01-30T07:38:05.310Z
Learning: In the Ginger automation framework, element existence checks using polling with 100ms delay is an acceptable approach, as confirmed by the maintainers.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Ginger/GingerCoreNET/GeneralLib/CommonLib.cs (12)
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.
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.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:30.816Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:33.780Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3984
File: Ginger/GingerCoreNET/ALMLib/RQM/ExportToRQM.cs:911-911
Timestamp: 2024-11-06T09:06:34.050Z
Learning: In the `Ginger/GingerCoreNET/ALMLib/RQM/ExportToRQM.cs` file of the Ginger project, initializing lists in C# using `[]` syntax (e.g., `List<T> list = [];`) is acceptable and does not require changing to `new List<T>()`.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4095
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/IBrowserTab.cs:117-117
Timestamp: 2025-02-11T13:35:40.039Z
Learning: XML documentation is not required for interface methods in the Ginger project as per team preference.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4107
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserElement.cs:763-831
Timestamp: 2025-02-19T06:07:03.515Z
Learning: In the Ginger project, prefer readable implementations with fixed values over configurable approaches when implementing UI automation features like drawing, unless configurability is specifically required.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
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.
Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs (11)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4029
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMEditPage.xaml.cs:268-283
Timestamp: 2024-12-11T12:48:36.841Z
Learning: In `POMEditPage.xaml.cs`, the `SupportedAgents()` method should retrieve all agents each time it is called because the user may change the POM, so this behavior is expected.
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.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3971
File: Ginger/Ginger/SolutionWindows/TreeViewItems/ApplicationModelsTreeItems/ApplicationPOMsTreeItem.cs:140-144
Timestamp: 2024-10-28T11:06:59.596Z
Learning: For the method `ImportFromKatalonObjectRepository` in `ApplicationPOMsTreeItem.cs`, the user considers adding additional error handling and validation as irrelevant.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4150
File: Ginger/GingerCoreNET/Application Models/Delta/PomDelta/MultiPomRunSetMapping.cs:38-39
Timestamp: 2025-04-01T11:43:47.188Z
Learning: The property in MultiPomRunSetMapping class was renamed from 'applicationPOMModels' to 'ApplicationPOMModels' to follow C# PascalCase naming conventions for public properties.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1104-1143
Timestamp: 2025-01-31T13:25:31.910Z
Learning: In Playwright-based element wait operations (like WaitForElementsCheckedAsync), do not throw immediately when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1075-1083
Timestamp: 2025-01-30T09:07:12.356Z
Learning: In Playwright-based element wait operations (like WaitForElementsVisibleAsync), do not short-circuit when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Ginger/GingerCoreCommon/UIElement/IWindowExplorer.cs (10)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
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.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:30.816Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:33.780Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
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.
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.
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4034
File: Ginger/GingerCoreNET/ALMLib/Azure/AzureDevOpsCore.cs:235-235
Timestamp: 2024-12-12T09:43:40.482Z
Learning: In `Ginger/GingerCoreNET/ALMLib/Azure/AzureDevOpsCore.cs`, using `dynamic` for the `attachment` variable in the `AddAttachmentsToDefect` method is acceptable because `AttachmentReference` is not reliable at this time.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs (5)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4169
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActUIElementHandler.cs:321-336
Timestamp: 2025-04-08T12:31:45.924Z
Learning: The GetTextLengthAsync method in Ginger Automation's Web driver should attempt to retrieve text from multiple sources (TextContent, InnerText, InputValue) to calculate text length, providing enhanced capabilities to read text length from different types of elements.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3783
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs:129-129
Timestamp: 2024-06-24T08:39:59.351Z
Learning: User IamRanjeetSingh has indicated that the `RunAction` method in the `PlaywrightDriver` class should remain synchronous due to current constraints in the codebase.
Ginger/GingerCore/Drivers/MainFrame/MainFrameDriver.cs (2)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4169
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActUIElementHandler.cs:321-336
Timestamp: 2025-04-08T12:31:45.924Z
Learning: The GetTextLengthAsync method in Ginger Automation's Web driver should attempt to retrieve text from multiple sources (TextContent, InnerText, InputValue) to calculate text length, providing enhanced capabilities to read text length from different types of elements.
Ginger/GingerCore/Drivers/InternalBrowserLib/InternalBrowser.cs (6)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3738
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/GingerWebDriver.cs:39-53
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The `GetSupportedBrowserTypes` method in `GingerWebDriver.cs` does not throw exceptions.
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.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4169
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActUIElementHandler.cs:321-336
Timestamp: 2025-04-08T12:31:45.924Z
Learning: The GetTextLengthAsync method in Ginger Automation's Web driver should attempt to retrieve text from multiple sources (TextContent, InnerText, InputValue) to calculate text length, providing enhanced capabilities to read text length from different types of elements.
Ginger/GingerCore/Drivers/WindowsLib/WindowsDriver.cs (3)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
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.
Ginger/GingerCore/Drivers/JavaDriverLib/JavaDriver.cs (1)

undefined

<retrieved_learning>
Learnt from: prashelke
PR: #4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
</retrieved_learning>

Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs (2)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Ginger/GingerCoreNET/GeneralLib/General.cs (3)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1581-1616
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has implemented the use of `using` statements for `Bitmap` objects and added a `finally` block to clear the `bitmapsToMerge` list. They have also handled exceptions that may occur during bitmap operations.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs (8)

undefined

<retrieved_learning>
Learnt from: prashelke
PR: #4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #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.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #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.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #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.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the Reporter.ToLog method within a catch block in the ShowScreenShot method of WindowExplorerPage.xaml.cs.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #4107
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserElement.cs:664-705
Timestamp: 2025-02-19T06:07:43.309Z
Learning: In the Ginger automation framework, exceptions in lower-level browser element operations are handled by their parent methods, which have more context about the operation being performed. Therefore, catch-and-rethrow without additional context is acceptable in the element-level methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActWebSmartSyncHandler.cs:358-365
Timestamp: 2025-01-30T07:40:08.756Z
Learning: In the Ginger automation framework, when an element is expected to exist but is not found, the code should throw an exception rather than return null, as the element's presence is a precondition for the operation.
</retrieved_learning>

Ginger/GingerCore/Drivers/PBDriver/PBDriver.cs (2)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (12)

undefined

<retrieved_learning>
Learnt from: prashelke
PR: #4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #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.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the Reporter.ToLog method within a catch block in the ShowScreenShot method of WindowExplorerPage.xaml.cs.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #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.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #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.
</retrieved_learning>

<retrieved_learning>
Learnt from: prashelke
PR: #4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
</retrieved_learning>

<retrieved_learning>
Learnt from: IamRanjeetSingh
PR: #3738
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/GingerWebDriver.cs:39-53
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The GetSupportedBrowserTypes method in GingerWebDriver.cs does not throw exceptions.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #4107
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserElement.cs:664-705
Timestamp: 2025-02-19T06:07:43.309Z
Learning: In the Ginger automation framework, exceptions in lower-level browser element operations are handled by their parent methods, which have more context about the operation being performed. Therefore, catch-and-rethrow without additional context is acceptable in the element-level methods.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1075-1083
Timestamp: 2025-01-30T09:07:12.356Z
Learning: In Playwright-based element wait operations (like WaitForElementsVisibleAsync), do not short-circuit when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1104-1143
Timestamp: 2025-01-31T13:25:31.910Z
Learning: In Playwright-based element wait operations (like WaitForElementsCheckedAsync), do not throw immediately when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
</retrieved_learning>

<retrieved_learning>
Learnt from: IamRanjeetSingh
PR: #3971
File: Ginger/GingerCoreNET/External/Katalon/Conversion/KatalonWebElementEntityToHTMLElementInfoConverter.cs:223-225
Timestamp: 2024-10-28T11:17:30.080Z
Learning: In the Ginger/GingerCoreNET/External/Katalon/Conversion/KatalonWebElementEntityToHTMLElementInfoConverter.cs file, when optional web element properties like id or name are not found during conversion, we should log warnings at eLogLevel.WARN level, as per the team's preference.
</retrieved_learning>

<retrieved_learning>
Learnt from: GokulBothe99
PR: #4095
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1330-1333
Timestamp: 2025-02-11T13:45:38.303Z
Learning: The SwitchToShadowDomAsync method in PlaywrightBrowserTab class is intentionally implemented as a placeholder that returns true, with the actual shadow DOM handling logic to be implemented in the future.
</retrieved_learning>

🔇 Additional comments (25)
Ginger/GingerCoreNET/GeneralLib/CommonLib.cs (1)

19-19: LGTM! Necessary imports for screenshot functionality.

The added using statements are required to support the bitmap handling and UI element functionality introduced in this PR.

Also applies to: 21-21

Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightDriver.cs (1)

898-898: LGTM! Method signature updated for interface compliance.

The addition of the optional Bitmap ScreenShot = null parameter correctly updates the method signature to match the IWindowExplorer interface. The default value maintains backward compatibility.

Note: While the ScreenShot parameter isn't used within this implementation, this appears to be intentional as the centralized screenshot functionality may be primarily used by other drivers like Selenium and Appium.

Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs (1)

1451-1453: LGTM! Interface implementation is correct.

The method correctly implements the updated interface signature. The empty list return is acceptable if this driver doesn't support element discovery functionality yet.

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

20-20: LGTM! Required import for Bitmap type.

The System.Drawing import is correctly added to support the Bitmap parameter type in the interface method.

Ginger/GingerCore/Drivers/InternalBrowserLib/InternalBrowser.cs (2)

29-29: LGTM: Appropriate namespace addition for Bitmap support.

The System.Drawing namespace is correctly added to support the Bitmap parameter type in the updated method signature.


1324-1328: LGTM: Interface compliance maintained for stub implementation.

The method signature correctly adds the optional Bitmap ScreenShot = null parameter to maintain consistency with the IWindowExplorer interface. The implementation appropriately remains a stub (returning null) since this is a placeholder driver with TODO comments throughout.

Ginger/GingerCore/Drivers/JavaDriverLib/JavaDriver.cs (1)

2121-2121: LGTM! Interface signature updated for consistency.

The addition of the optional Bitmap ScreenShot = null parameter aligns this driver with the standardized IWindowExplorer interface and other driver implementations. The change maintains backward compatibility and prepares for future screenshot-based element learning functionality.

Note: The parameter is currently not utilized within the method body, which appears intentional as part of this preparatory interface update.

Ginger/GingerCore/Drivers/WindowsLib/WindowsDriver.cs (1)

1148-1148: LGTM: Interface compliance update for screenshot standardization.

The method signature correctly adds the optional Bitmap ScreenShot parameter to match the updated IWindowExplorer interface. Since WindowsDriver doesn't require element screenshot cropping functionality, leaving the parameter unused is appropriate.

Ginger/GingerCore/Drivers/MainFrame/MainFrameDriver.cs (1)

736-736: LGTM: Interface compliance update for mainframe driver.

The method signature correctly adds the optional Bitmap ScreenShot parameter to match the updated IWindowExplorer interface. Since MainFrameDriver extracts element information from XML screen data rather than visual screenshots, leaving the parameter unused is appropriate for this driver type.

Ginger/GingerCore/Drivers/PBDriver/PBDriver.cs (1)

1113-1116: LGTM! Interface compliance update.

The addition of the optional ScreenShot parameter aligns with the interface standardization across drivers. The parameter is appropriately unused in this implementation as PBDriver delegates screenshot functionality to the underlying UI automation helper.

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

42-42: LGTM! Required import for image format operations.

The addition of System.Drawing.Imaging import is necessary for the new ImageFormat.Png usage in the screenshot methods.


1166-1211: Excellent implementation with robust error handling.

The TakeElementScreenShot method demonstrates several best practices:

  • Comprehensive null validation for input parameters
  • Proper resource disposal using using statements for Bitmap objects
  • Input validation for crop dimensions to prevent invalid operations
  • Graceful exception handling with logging via Reporter.ToLog
  • Clean conversion to Base64 PNG format

This centralizes screenshot cropping logic that was previously duplicated across drivers.


1213-1253: Well-designed element bounds parsing with fallback support.

The GetLocationAndSizeOfElement method handles multiple element property formats effectively:

  • Case-insensitive property lookup using StringComparer.InvariantCultureIgnoreCase
  • Support for both "bounds" property format (with brackets) and separate x/y/width/height properties
  • Robust parsing with Math.Max to ensure non-negative dimensions
  • Safe fallback to zero values with debug logging on parse failures

The dual format support ensures compatibility across different driver implementations.

Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs (2)

2577-2577: LGTM! Method signature update aligns with the interface change.

The addition of the optional Bitmap ScreenShot parameter to the GetVisibleControls method is appropriate for the centralized screenshot handling approach.


2657-2663: Good refactoring to use centralized screenshot utility.

The replacement of the private TakeElementScreenShot method with the centralized General.TakeElementScreenShot is well-implemented. The error handling is properly maintained, and using the fully qualified namespace is a good practice.

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

5248-5248: Interface method signature updated correctly.

The addition of the optional Bitmap ScreenShot parameter to the GetVisibleControls method maintains backward compatibility while enabling the new screenshot functionality.


5261-5261: Parameter propagation is correct.

The ScreenShot parameter is properly passed to the FindAllElementsFromPOM method using named parameter syntax for clarity.


5314-5314: Method signature updated consistently.

The FindAllElementsFromPOM method signature is updated to include the optional ScreenShot parameter, maintaining consistency with the interface changes.


5359-5359: Parameter passed correctly to element creation.

The ScreenShot parameter is properly propagated to the CreateHTMLElementInfo method using named parameter syntax.


5371-5371: Consistent parameter propagation to processing methods.

Both ProcessShadowDOMElements and ProcessIframeElement methods receive the ScreenShot parameter correctly, ensuring the screenshot functionality works across different DOM contexts.

Also applies to: 5378-5378


5446-5446: Code simplification with ternary operator.

The change from an if-else statement to a ternary operator for parentPOMGuid assignment is more concise and readable.


5462-5466: Performance improvement with Properties.AddRange.

Replacing multiple Properties.Add calls with a single AddRange call is more efficient and cleaner.


5484-5484: Centralized screenshot utility implementation.

The change to use GingerCoreNET.GeneralLib.General.TakeElementScreenShot(foundElementInfo, ScreenShot) centralizes the screenshot functionality, which aligns with the PR objective of creating a common method for web and mobile applications.


5490-5490: Method signatures updated for DOM processing methods.

Both ProcessShadowDOMElements and ProcessIframeElement methods are updated to include the optional ScreenShot parameter, maintaining consistency across the codebase.

Also applies to: 5506-5506


5501-5501: Recursive screenshot parameter propagation.

The ScreenShot parameter is correctly passed to recursive calls of FindAllElementsFromPOM, ensuring screenshot functionality works properly in nested DOM structures like shadow DOM and iframes.

Also applies to: 5513-5513

Comment thread Ginger/GingerCoreNET/GeneralLib/CommonLib.cs Outdated
Comment thread Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs Outdated
Comment thread Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs Outdated
Comment thread Ginger/GingerCoreCommon/UIElement/IWindowExplorer.cs Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 7, 2025

@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: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cb106cb and 48062d9.

📒 Files selected for processing (5)
  • Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs (1 hunks)
  • Ginger/GingerCoreCommon/UIElement/IWindowExplorer.cs (2 hunks)
  • Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs (1 hunks)
  • Ginger/GingerCoreNET/GeneralLib/CommonLib.cs (2 hunks)
  • Ginger/GingerCoreNET/GeneralLib/General.cs (2 hunks)
🧰 Additional context used
🧠 Learnings (6)
📓 Common learnings
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActWebSmartSyncHandler.cs:137-150
Timestamp: 2025-01-30T07:38:05.310Z
Learning: In the Ginger automation framework, element existence checks using polling with 100ms delay is an acceptable approach, as confirmed by the maintainers.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Ginger/GingerCoreNET/GeneralLib/CommonLib.cs (19)
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.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:30.816Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:33.780Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
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.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3984
File: Ginger/GingerCoreNET/ALMLib/RQM/ExportToRQM.cs:911-911
Timestamp: 2024-11-06T09:06:34.050Z
Learning: In the `Ginger/GingerCoreNET/ALMLib/RQM/ExportToRQM.cs` file of the Ginger project, initializing lists in C# using `[]` syntax (e.g., `List<T> list = [];`) is acceptable and does not require changing to `new List<T>()`.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4107
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserElement.cs:763-831
Timestamp: 2025-02-19T06:07:03.515Z
Learning: In the Ginger project, prefer readable implementations with fixed values over configurable approaches when implementing UI automation features like drawing, unless configurability is specifically required.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4095
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/IBrowserTab.cs:117-117
Timestamp: 2025-02-11T13:35:40.039Z
Learning: XML documentation is not required for interface methods in the Ginger project as per team preference.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4132
File: Ginger/GingerCoreCommon/ReporterLib/WorkSpaceReporterBase.cs:61-70
Timestamp: 2025-03-03T15:06:28.482Z
Learning: Extra line breaks (double Environment.NewLine) in console output in WorkSpaceReporterBase.cs are intentionally added for improved readability of log messages.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4193
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/AIGeneratedPreviewWizardPage.xaml.cs:131-138
Timestamp: 2025-04-30T13:21:34.994Z
Learning: In AIGeneratedPreviewWizardPage.xaml.cs, the current code checks if the response ends with triple backticks and removes them manually. This method is fragile and should be replaced with a more robust regex-based parser. The user plans to address this in a future update.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1139-1142
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has updated the code by removing or addressing the commented code as suggested in the review.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3931
File: Ginger/GingerCoreNET/Run/GingerExecutionEngine.cs:3826-3835
Timestamp: 2024-09-26T09:51:47.027Z
Learning: If the user indicates that code refactoring, such as flattening nested `if` statements, will be addressed later, acknowledge and do not insist.
Learnt from: Maheshkale447
PR: Ginger-Automation/Ginger#3637
File: Ginger/GingerCoreNET/Application Models/Execution/POM/POMExecutionUtils.cs:226-234
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The `LastUpdatedTime` in the `POMExecutionUtils.cs` file of the Ginger project is always in the correct DateTime format, as confirmed by the user. This information is crucial for avoiding unnecessary error handling suggestions in future reviews.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3488
File: Ginger/GingerCoreNET/DataSource/LiteDB.cs:53-60
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User @IamRanjeetSingh has reviewed and accepted the side effects of triggering `TryUpgradeDataFile` upon setting `FileFullPath` in `GingerLiteDB` class.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4163
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/UpdateMultipleWizard/POMObjectMappingWithRunsetWizardPage.xaml.cs:198-198
Timestamp: 2025-04-07T06:02:10.172Z
Learning: prashelke prefers to keep commented-out code in the codebase when the functionality will be needed in the future, as is the case with the "Run All Run Set" toolbar tool in POMObjectMappingWithRunsetWizardPage.xaml.cs.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
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.
Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs (20)
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4029
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMEditPage.xaml.cs:268-283
Timestamp: 2024-12-11T12:48:36.841Z
Learning: In `POMEditPage.xaml.cs`, the `SupportedAgents()` method should retrieve all agents each time it is called because the user may change the POM, so this behavior is expected.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4150
File: Ginger/GingerCoreNET/Application Models/Delta/PomDelta/MultiPomRunSetMapping.cs:38-39
Timestamp: 2025-04-01T11:43:47.188Z
Learning: The property in MultiPomRunSetMapping class was renamed from 'applicationPOMModels' to 'ApplicationPOMModels' to follow C# PascalCase naming conventions for public properties.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3971
File: Ginger/Ginger/SolutionWindows/TreeViewItems/ApplicationModelsTreeItems/ApplicationPOMsTreeItem.cs:140-144
Timestamp: 2024-10-28T11:06:59.596Z
Learning: For the method `ImportFromKatalonObjectRepository` in `ApplicationPOMsTreeItem.cs`, the user considers adding additional error handling and validation as irrelevant.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
Learnt from: Maheshkale447
PR: Ginger-Automation/Ginger#3637
File: Ginger/GingerCoreNET/Application Models/Execution/POM/POMExecutionUtils.cs:226-234
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The `LastUpdatedTime` in the `POMExecutionUtils.cs` file of the Ginger project is always in the correct DateTime format, as confirmed by the user. This information is crucial for avoiding unnecessary error handling suggestions in future reviews.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4228
File: Ginger/Ginger/Actions/ActionEditPages/ActMobileDeviceEditPage.xaml.cs:83-84
Timestamp: 2025-06-16T10:36:01.993Z
Learning: For the `UnLockType` property in `Ginger/Ginger/Actions/ActionEditPages/ActMobileDeviceEditPage.xaml.cs`, the current naming convention with capital 'L' in the middle should be maintained per project preferences.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3971
File: Ginger/GingerCoreNET/External/Katalon/Conversion/KatalonObjectRepositoryToPOMConverter.cs:18-23
Timestamp: 2024-10-28T11:12:30.029Z
Learning: In `KatalonObjectRepositoryToPOMConverter.cs`, it's acceptable to declare classes with parameters in the class definition, such as `public sealed class Result(ApplicationPOMModel pom, ePlatformType platform)`, and this syntax is valid in the codebase.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4193
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/AIGeneratedPreviewWizardPage.xaml.cs:131-138
Timestamp: 2025-04-30T13:21:34.994Z
Learning: In AIGeneratedPreviewWizardPage.xaml.cs, the current code checks if the response ends with triple backticks and removes them manually. This method is fragile and should be replaced with a more robust regex-based parser. The user plans to address this in a future update.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1139-1142
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has updated the code by removing or addressing the commented code as suggested in the review.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3488
File: Ginger/GingerCoreNET/DataSource/LiteDB.cs:53-60
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User @IamRanjeetSingh has reviewed and accepted the side effects of triggering `TryUpgradeDataFile` upon setting `FileFullPath` in `GingerLiteDB` class.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActWebSmartSyncHandler.cs:137-150
Timestamp: 2025-01-30T07:38:05.310Z
Learning: In the Ginger automation framework, element existence checks using polling with 100ms delay is an acceptable approach, as confirmed by the maintainers.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3931
File: Ginger/GingerCoreNET/Run/GingerExecutionEngine.cs:3826-3835
Timestamp: 2024-09-26T09:51:47.027Z
Learning: If the user indicates that code refactoring, such as flattening nested `if` statements, will be addressed later, acknowledge and do not insist.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1104-1143
Timestamp: 2025-01-31T13:25:31.910Z
Learning: In Playwright-based element wait operations (like WaitForElementsCheckedAsync), do not throw immediately when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserTab.cs:1075-1083
Timestamp: 2025-01-30T09:07:12.356Z
Learning: In Playwright-based element wait operations (like WaitForElementsVisibleAsync), do not short-circuit when elements are initially absent, as the method is designed to keep polling until timeout to handle dynamic element appearance.
Ginger/GingerCoreCommon/UIElement/IWindowExplorer.cs (22)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: Maheshkale447
PR: Ginger-Automation/Ginger#3637
File: Ginger/GingerCoreNET/Application Models/Execution/POM/POMExecutionUtils.cs:226-234
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The `LastUpdatedTime` in the `POMExecutionUtils.cs` file of the Ginger project is always in the correct DateTime format, as confirmed by the user. This information is crucial for avoiding unnecessary error handling suggestions in future reviews.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3971
File: Ginger/Ginger/SolutionWindows/TreeViewItems/ApplicationModelsTreeItems/ApplicationPOMsTreeItem.cs:140-144
Timestamp: 2024-10-28T11:06:59.596Z
Learning: For the method `ImportFromKatalonObjectRepository` in `ApplicationPOMsTreeItem.cs`, the user considers adding additional error handling and validation as irrelevant.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4193
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/AIGeneratedPreviewWizardPage.xaml.cs:131-138
Timestamp: 2025-04-30T13:21:34.994Z
Learning: In AIGeneratedPreviewWizardPage.xaml.cs, the current code checks if the response ends with triple backticks and removes them manually. This method is fragile and should be replaced with a more robust regex-based parser. The user plans to address this in a future update.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4163
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/UpdateMultipleWizard/POMObjectMappingWithRunsetWizardPage.xaml.cs:198-198
Timestamp: 2025-04-07T06:02:10.172Z
Learning: prashelke prefers to keep commented-out code in the codebase when the functionality will be needed in the future, as is the case with the "Run All Run Set" toolbar tool in POMObjectMappingWithRunsetWizardPage.xaml.cs.
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.
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.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1139-1142
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has updated the code by removing or addressing the commented code as suggested in the review.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3488
File: Ginger/GingerCoreNET/DataSource/LiteDB.cs:53-60
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User @IamRanjeetSingh has reviewed and accepted the side effects of triggering `TryUpgradeDataFile` upon setting `FileFullPath` in `GingerLiteDB` class.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4107
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserElement.cs:763-831
Timestamp: 2025-02-19T06:07:03.515Z
Learning: In the Ginger project, prefer readable implementations with fixed values over configurable approaches when implementing UI automation features like drawing, unless configurability is specifically required.
Learnt from: manas-droid
PR: Ginger-Automation/Ginger#3389
File: Ginger/Ginger/RunSetPageLib/RunnerPage.xaml.cs:433-439
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has agreed to add logging within the empty catch block in the `GenerateBFReport` method as suggested.
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.
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.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:30.816Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4137
File: Ginger/Ginger/SourceControl/SourceControlProjectsPage.xaml.cs:21-21
Timestamp: 2025-03-20T11:10:33.780Z
Learning: The `Amdocs.Ginger.Common.SourceControlLib` namespace is required in files that reference the `GingerSolution` class for source control operations in the Ginger automation framework.
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.
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.
Learnt from: AmanPrasad43
PR: Ginger-Automation/Ginger#4034
File: Ginger/GingerCoreNET/ALMLib/Azure/AzureDevOpsCore.cs:235-235
Timestamp: 2024-12-12T09:43:40.482Z
Learning: In `Ginger/GingerCoreNET/ALMLib/Azure/AzureDevOpsCore.cs`, using `dynamic` for the `attachment` variable in the `AddAttachmentsToDefect` method is acceptable because `AttachmentReference` is not reliable at this time.
Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs (14)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4222
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Mobile/Appium/GenericAppiumDriver.cs:2645-2656
Timestamp: 2025-06-19T05:08:45.192Z
Learning: In the Ginger mobile automation framework (GenericAppiumDriver.cs), XPath checks for "android" and "XCUIElement" should remain case-sensitive as currently implemented. The team prefers not to make these checks case-insensitive.
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.
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.
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.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4193
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/AIGeneratedPreviewWizardPage.xaml.cs:131-138
Timestamp: 2025-04-30T13:21:34.994Z
Learning: In AIGeneratedPreviewWizardPage.xaml.cs, the current code checks if the response ends with triple backticks and removes them manually. This method is fragile and should be replaced with a more robust regex-based parser. The user plans to address this in a future update.
Learnt from: Maheshkale447
PR: Ginger-Automation/Ginger#3637
File: Ginger/GingerCoreNET/Application Models/Execution/POM/POMExecutionUtils.cs:226-234
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The `LastUpdatedTime` in the `POMExecutionUtils.cs` file of the Ginger project is always in the correct DateTime format, as confirmed by the user. This information is crucial for avoiding unnecessary error handling suggestions in future reviews.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1139-1142
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has updated the code by removing or addressing the commented code as suggested in the review.
Learnt from: IamRanjeetSingh
PR: Ginger-Automation/Ginger#3488
File: Ginger/GingerCoreNET/DataSource/LiteDB.cs:53-60
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User @IamRanjeetSingh has reviewed and accepted the side effects of triggering `TryUpgradeDataFile` upon setting `FileFullPath` in `GingerLiteDB` class.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4107
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Playwright/PlaywrightBrowserElement.cs:763-831
Timestamp: 2025-02-19T06:07:03.515Z
Learning: In the Ginger project, prefer readable implementations with fixed values over configurable approaches when implementing UI automation features like drawing, unless configurability is specifically required.
Learnt from: GokulBothe99
PR: Ginger-Automation/Ginger#4072
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/ActionHandlers/ActWebSmartSyncHandler.cs:137-150
Timestamp: 2025-01-30T07:38:05.310Z
Learning: In the Ginger automation framework, element existence checks using polling with 100ms delay is an acceptable approach, as confirmed by the maintainers.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4193
File: Ginger/Ginger/ApplicationModelsLib/POMModels/POMWizardLib/LearnWizard/UploadMockUpWizardPage.xaml.cs:56-58
Timestamp: 2025-04-30T13:46:17.756Z
Learning: The file size limit check in UploadMockUpWizardPage.xaml.cs uses a magic number (500000 bytes) which prashelke plans to refactor later to use a named constant for better maintainability.
Ginger/GingerCoreNET/GeneralLib/General.cs (3)
Learnt from: prashelke
PR: Ginger-Automation/Ginger#4232
File: Ginger/GingerCoreNET/ActionsLib/UI/VisualTesting/VRTAnalyzer.cs:219-226
Timestamp: 2025-06-16T10:13:01.346Z
Learning: In VRTAnalyzer.cs for the GenericAppiumDriver class, the mAct.IsFullPageScreenshot flag is not applicable and should not be used to control screenshot behavior. GenericAppiumDriver always uses CaptureFullPageCroppedScreenshot() method regardless of the IsFullPageScreenshot flag setting.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs:1581-1616
Timestamp: 2024-07-26T22:04:12.930Z
Learning: The user has implemented the use of `using` statements for `Bitmap` objects and added a `finally` block to clear the `bitmapsToMerge` list. They have also handled exceptions that may occur during bitmap operations.
Learnt from: prashelke
PR: Ginger-Automation/Ginger#3429
File: Ginger/Ginger/AutomatePageLib/AddActionMenu/WindowExplorer/Common/WindowExplorerPage.xaml.cs:1152-1153
Timestamp: 2024-07-26T22:04:12.930Z
Learning: User feedback for exceptions in the screenshot functionality is handled using the `Reporter.ToLog` method within a `catch` block in the `ShowScreenShot` method of `WindowExplorerPage.xaml.cs`.
🧬 Code Graph Analysis (1)
Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs (1)
Ginger/GingerCoreCommon/Repository/ApplicationModelLib/POMModelLib/PomSetting.cs (1)
  • PomSetting (27-64)
🔇 Additional comments (5)
Ginger/GingerCoreNET/GeneralLib/CommonLib.cs (1)

19-21: LGTM! Using directives properly added to support screenshot functionality.

The addition of System.Drawing and Amdocs.Ginger.Common.UIElement using directives aligns with the PR's objective to add common screenshot methods for web and mobile applications.

Ginger/GingerCoreNET/Application Models/Learn/POM/PomLearnUtils.cs (1)

314-314: LGTM! ScreenShot parameter correctly propagated through GetVisibleControls calls.

The changes properly pass the ScreenShot parameter to both GetVisibleControls method calls, ensuring the screenshot bitmap captured in LearnScreenShot() is available during element discovery for both mapped and unmapped element learning scenarios.

Also applies to: 321-321

Ginger/GingerCoreCommon/UIElement/IWindowExplorer.cs (2)

20-20: LGTM! System.Drawing using directive added to support Bitmap parameter.

The using directive is necessary to support the Bitmap type in the updated GetVisibleControls method signature.


41-41: LGTM! Interface method signature enhanced with backward-compatible design.

The addition of the optional Bitmap ScreenShot = null parameter to GetVisibleControls is well-designed:

  • Maintains backward compatibility for existing implementations
  • Enables the new screenshot functionality across all drivers
  • Follows good interface design principles with optional parameters
Ginger/GingerCore/Drivers/ASCF/ASCFDriver.cs (1)

1450-1450: LGTM! Interface signature update correctly implemented.

The method signature update properly implements the extended IWindowExplorer.GetVisibleControls interface with the new optional Bitmap ScreenShot parameter. The change maintains backward compatibility and aligns with the broader PR objective to enhance screenshot functionality across drivers.

Comment thread Ginger/GingerCoreNET/GeneralLib/General.cs Outdated
Comment thread Ginger/GingerCoreNET/GeneralLib/General.cs Outdated
Comment thread Ginger/GingerCoreNET/GeneralLib/General.cs
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 9, 2025
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 9, 2025
@Maheshkale447
Maheshkale447 merged commit 4c2fd0a into master Jul 10, 2025
4 checks passed
@Maheshkale447
Maheshkale447 deleted the Feature/WebPOMEnhancement branch July 10, 2025 14:06
@coderabbitai coderabbitai Bot mentioned this pull request Oct 18, 2025
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