Package io.github.jspinak.brobot.action.composite.multiple.finds


package io.github.jspinak.brobot.action.composite.multiple.finds
Advanced find operations with multiple strategies and hierarchical searching.

This package extends the basic find capabilities with sophisticated multi-find operations including nested searches, confirmed finds, and batch pattern matching. These advanced find operations enable complex visual search scenarios that go beyond simple pattern matching.

Key Classes

  • invalid reference
    io.github.jspinak.brobot.action.composite.multiple.finds.MultipleFinds
    - Execute multiple find operations with different strategies
  • NestedFinds - Find patterns within previously found regions
  • invalid reference
    io.github.jspinak.brobot.action.composite.multiple.finds.ConfirmedFinds
    - Find operations with additional verification criteria

Advanced Find Patterns

Hierarchical Searching

Search for elements within specific containers:

  • Find buttons within dialog boxes
  • Locate items within list containers
  • Search text within specific regions
  • Nested pattern matching

Multi-Strategy Searching

Apply different find strategies to the same targets:

  • Try BEST first, then ALL if needed
  • Combine image and text searching
  • Use motion detection as fallback
  • Apply different similarity thresholds

Verified Matching

Ensure found elements meet additional criteria:

  • Verify surrounding context
  • Check element state or appearance
  • Confirm stability over time
  • Validate against expected properties

Use Cases

  • Complex UI Navigation - Find elements in dynamic layouts
  • Data Extraction - Locate and extract structured information
  • State Verification - Confirm multiple UI elements are present
  • Adaptive Searching - Adjust strategies based on results
  • Performance Optimization - Search only within relevant areas

Example Usage


 // Nested find - find buttons within a dialog
 NestedFinds nestedFind = new NestedFinds(...);

 // First find the dialog
 ObjectCollection dialogTarget = new ObjectCollection.Builder()
     .withImages("dialog_box.png")
     .build();

 // Then find buttons within the dialog
 ObjectCollection buttonTargets = new ObjectCollection.Builder()
     .withImages("ok_button.png", "cancel_button.png")
     .build();

 ActionResult nestedResult = nestedFind.findInside(
     dialogTarget,
     buttonTargets
 );

 // Multiple find strategies
 MultipleFinds multiFind = new MultipleFinds(...);

 // Define different strategies to try
 List<ActionConfig> strategies = Arrays.asList(
     new ActionConfig.Builder()
         .setFind(Find.BEST)
         .setSimilarity(0.95)
         .build(),
     new ActionConfig.Builder()
         .setFind(Find.ALL)
         .setSimilarity(0.85)
         .build(),
     new ActionConfig.Builder()
         .setFind(Find.COLOR)
         .build()
 );

 ObjectCollection targets = new ObjectCollection.Builder()
     .withImages("dynamic_element.png")
     .build();

 ActionResult multiResult = multiFind.perform(strategies, targets);

 // Confirmed find - verify found elements
 ConfirmedFinds confirmedFind = new ConfirmedFinds(...);

 // Find with confirmation criteria
 ActionConfig confirmOptions = new ActionConfig.Builder()
     .setFind(Find.ALL)
     .setConfirmationImage("checked_state.png")
     .setConfirmationTimeout(2.0)
     .build();

 ActionResult confirmedResult = confirmedFind.perform(
     confirmOptions,
     new ObjectCollection.Builder()
         .withImages("checkbox.png")
         .build()
 );

 // Process only confirmed matches
 for (Match match : confirmedResult.getMatches()) {
     if (match.isConfirmed()) {
         // Process confirmed checkbox
     }
 }
 

Performance Considerations

  • Region Constraints - Narrow search areas for faster results
  • Strategy Ordering - Try fastest strategies first
  • Caching - Reuse results when possible
  • Early Termination - Stop when sufficient matches found
  • Parallel Execution - Run independent searches concurrently

Best Practices

  • Use nested finds to reduce search space
  • Apply confirmation only when necessary
  • Order strategies by likelihood of success
  • Set appropriate timeouts for each strategy
  • Log strategy performance for optimization
  • Consider memory usage with large result sets
See Also:
  • Find
  • invalid reference
    io.github.jspinak.brobot.model.Match
  • invalid reference
    io.github.jspinak.brobot.action.ActionConfig.Find