Skip to content

Commit 43babcc

Browse files
authored
fix(java): 🐛 fixed issue with the Locator class (#1087)
1 parent 4039c0e commit 43babcc

File tree

5 files changed

+382
-518
lines changed

5 files changed

+382
-518
lines changed

core-java/src/main/java/io/github/boykaframework/actions/elements/ElementFinder.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static io.github.boykaframework.manager.ParallelSession.getSession;
2121
import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow;
2222
import static io.github.boykaframework.utils.ErrorHandler.throwError;
23-
import static java.text.MessageFormat.format;
2423
import static java.util.Objects.isNull;
2524
import static java.util.Objects.requireNonNull;
2625
import static org.apache.logging.log4j.LogManager.getLogger;
@@ -31,7 +30,6 @@
3130

3231
import io.github.boykaframework.builders.Locator;
3332
import io.github.boykaframework.enums.WaitStrategy;
34-
import io.github.boykaframework.exception.FrameworkError;
3533
import org.apache.logging.log4j.Logger;
3634
import org.openqa.selenium.TimeoutException;
3735
import org.openqa.selenium.WebDriver;
@@ -60,14 +58,17 @@ public static WebElement find (final Locator locator, final WaitStrategy waitStr
6058
if (elements.isEmpty ()) {
6159
throwError (ELEMENT_NOT_FOUND, locator.getName (), getSession ().getPlatformType ());
6260
}
61+
final var index = getPlatformIndex (locator);
6362
if (!isNull (locator.getFilter ())) {
64-
return elements.stream ()
63+
final var filteredElements = elements.stream ()
6564
.filter (locator.getFilter ())
66-
.findFirst ()
67-
.orElseThrow (() -> new FrameworkError (format (ELEMENT_NOT_FOUND.getMessageText (), locator.getName (),
68-
getSession ().getPlatformType ())));
65+
.toList ();
66+
if (filteredElements.isEmpty ()) {
67+
throwError (ELEMENT_NOT_FOUND, locator.getName (), getSession ().getPlatformType ());
68+
}
69+
return filteredElements.get (index);
6970
}
70-
return elements.get (locator.getIndex ());
71+
return elements.get (index);
7172
}
7273

7374
/**
@@ -115,6 +116,16 @@ private static <D extends WebDriver> List<WebElement> finds (final D driver, fin
115116
return LOGGER.traceExit (finds (driver, null, null, locator));
116117
}
117118

119+
private static int getPlatformIndex (final Locator locator) {
120+
final var index = switch (getSession ().getPlatformType ()) {
121+
case ANDROID -> locator.getAndroidIndex ();
122+
case IOS -> locator.getIosIndex ();
123+
case MAC -> locator.getMacIndex ();
124+
default -> locator.getWebIndex ();
125+
};
126+
return index > -1 ? index : locator.getIndex ();
127+
}
128+
118129
private static void waitForElement (final Locator locator, final WaitStrategy waitStrategy) {
119130
try {
120131
final var wait = getSession ().getWait ();

core-java/src/main/java/io/github/boykaframework/builders/Locator.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,25 @@
3939
@Builder (toBuilder = true, builderMethodName = "buildLocator")
4040
public class Locator {
4141
private By android;
42+
@Builder.Default
43+
private int androidIndex = -1;
4244
private Predicate<WebElement> filter;
43-
private int index;
45+
@Builder.Default
46+
private int index = 0;
4447
private By ios;
48+
@Builder.Default
49+
private int iosIndex = -1;
4550
private By mac;
51+
@Builder.Default
52+
private int macIndex = -1;
4653
@NotNull
4754
private String name;
4855
private Locator parent;
4956
@Builder.Default
50-
private boolean shadowRoot = false;
57+
private boolean shadowRoot = false;
5158
private By web;
59+
@Builder.Default
60+
private int webIndex = -1;
5261

5362
/**
5463
* Gets the platform specific locator

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"@release-it-plugins/lerna-changelog": "^8.0.1",
3939
"@stylistic/eslint-plugin-js": "^4.4.1",
4040
"@stylistic/eslint-plugin-ts": "^4.4.1",
41-
"@types/node": "^24.6.2",
41+
"@types/node": "^24.7.0",
4242
"@typescript-eslint/eslint-plugin": "^8.45.0",
4343
"@typescript-eslint/parser": "^8.45.0",
4444
"commitlint": "^20.1.0",
@@ -61,7 +61,7 @@
6161
"prettier": "^3.6.2",
6262
"react": "^19.2.0",
6363
"react-dom": "^19.2.0",
64-
"release-it": "^19.0.4",
64+
"release-it": "^19.0.5",
6565
"ts-node": "^10.9.2",
6666
"typescript": "^5.9.3",
6767
"typescript-eslint": "^8.45.0"
@@ -100,5 +100,5 @@
100100
"pnpm format"
101101
]
102102
},
103-
"packageManager": "pnpm@10.15.0"
103+
"packageManager": "pnpm@10.18.0"
104104
}

0 commit comments

Comments
 (0)