diff --git a/pom.xml b/pom.xml
index a8d9318..ac2724c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,7 +82,7 @@
com.github.aquality-automation
aquality-selenium-core
- 3.1.1
+ 3.1.2
org.apache.commons
diff --git a/src/main/java/aquality/selenium/elements/ElementFactory.java b/src/main/java/aquality/selenium/elements/ElementFactory.java
index d7f3cb6..ed99699 100644
--- a/src/main/java/aquality/selenium/elements/ElementFactory.java
+++ b/src/main/java/aquality/selenium/elements/ElementFactory.java
@@ -61,23 +61,35 @@ protected Map ((RemoteWebDriver) Objects.requireNonNull(driver))
- .executeScript(JavaScript.GET_ELEMENT_XPATH.getScript(), webElement), "XPath generation failed"));
- }
- catch (InvalidArgumentException | JavascriptException ex) {
+ return generateXpathLocator(multipleElementsLocator, webElement, elementIndex);
+ } catch (InvalidArgumentException | JavascriptException ex) {
return By.cssSelector((String) conditionalWait.waitFor(driver -> ((RemoteWebDriver) Objects.requireNonNull(driver))
.executeScript(JavaScript.GET_ELEMENT_CSS_SELECTOR.getScript(), webElement), ex.getMessage() + ". CSS selector generation failed too."));
}
}
+ /**
+ * Generates xpath locator for target element.
+ *
+ * @param multipleElementsLocator locator used to find elements.
+ * @param webElement target element.
+ * @param elementIndex index of target element.
+ * @return target element's locator
+ */
+ @Override
+ protected By generateXpathLocator(By multipleElementsLocator, WebElement webElement, int elementIndex) {
+ if (isLocatorSupportedForXPathExtraction(multipleElementsLocator)) {
+ By locator = super.generateXpathLocator(multipleElementsLocator, webElement, elementIndex);
+ if (elementFinder.findElements(locator).size() == 1) {
+ return locator;
+ }
+ }
+ return By.xpath((String) conditionalWait.waitFor(driver -> ((RemoteWebDriver) Objects.requireNonNull(driver))
+ .executeScript(JavaScript.GET_ELEMENT_XPATH.getScript(), webElement), "XPath generation failed"));
+ }
+
/**
* Defines is the locator can be transformed to xpath or not.
*