Если вы не хотите получать список, а только элемент, вы должны использовать «findElement», а не «findElements».
То, как вы делаете, чтобы найти дочерний элемент, это допустимо, на мой взгляд.
То, что я использую, чтобы проверить, есть ли там элемент:
public static boolean checkElement(By by) {
try {
if (!isPresent(by)) {
return false;
}
if (!isVisible(by)) {
return false;
}
return true;
} catch (StaleElementReferenceException e) {
e.printStackTrace();
return false;
} catch (Exception e) {
return false;
}
}
public static boolean isPresent(By by) {
try {
getElement(by).getLocation();
return true;
} catch (StaleElementReferenceException e) {
e.printStackTrace();
return false;
} catch (Exception e) {
return false;
}
}
public static boolean isVisible(By by) {
try {
return getElement(by).isDisplayed();
} catch (StaleElementReferenceException e) {
e.printStackTrace();
return false;
} catch (Exception e) {
return false;
}
}
public static WebElement getElement(By by) {
try {
return driver.findElement(by);
} catch (StaleElementReferenceException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
return null;
}
}
Надеюсь, это поможет.