Ich hatte das gleiche Problem. Aber meine Elemente auf der Seite waren sehr seltsam. Einige von ihnen konnten klicken, obwohl sie nicht anklickbar waren, einige von ihnen Selen konnten nicht klicken, aber konnten Schlüssel an sie senden. Nach einigen Stunden des Nachdenkens habe ich eine universelle Methode geschrieben, die prüft, ob Elemente aktiviert sind oder nicht.
Nach dem Gespräch mit dem Programmierer, habe ich gewusst, dass sie auf dieser Seite einige spezielle Select verwenden, und es sieht aus wie Div mit Input drin. Und er sagt, dass ich es deaktivieren kann, indem ich das Attribut "Class of Div" überprüfe. Wenn 'select2-container-disabled' ausgewählt ist, ist diese Eingabe deaktiviert.
Und ich ändere meine Methode. Jetzt sieht es so aus:
public boolean isNotClickable(WebElement... elements) {
List<WebElement> elementsChecked = new ArrayList<>();
List<WebElement> elementsToCheckByClass = new ArrayList<>();
List<WebElement> elementsToCheckByClick = new ArrayList<>();
List<WebElement> elementsToCheckBySendKeys = new ArrayList<>();
for (WebElement checkedElement : elements) {
log.info("Checking, that element [" + getLocator(checkedElement) + "] is not clickable by isEnabled()");
if (checkedElement.isEnabled()) {
elementsToCheckByClass.add(checkedElement);
} else {
elementsChecked.add(checkedElement);
}
}
if (!elementsToCheckByClass.isEmpty()) {
for (WebElement checkedByClassElement : elementsToCheckByClass) {
log.info("Checking, that element [" + getLocator(checkedByClassElement) + "] is not clickable by class");
String classOfElement = checkedByClassElement.getAttribute("class");
List<String> classes = new ArrayList<>(Arrays.asList(classOfElement.split(" ")));
if (!classes.contains("select2-container-disabled")) {
elementsToCheckByClick.add(checkedByClassElement);
} else {
elementsChecked.add(checkedByClassElement);
}
}
}
if (!elementsToCheckByClick.isEmpty()) {
WebDriverWait wait = new WebDriverWait(driverUtils.getDriver(), 1);
for (WebElement checkedByClickElement : elementsToCheckByClick) {
log.info("Checking, that element [" + getLocator(checkedByClickElement) + "] is not clickable by clicking it");
try {
wait.until(elementToBeClickable(checkedByClickElement));
elementsToCheckBySendKeys.add(checkedByClickElement);
} catch (Exception e) {
elementsChecked.add(checkedByClickElement);
}
}
}
if (!elementsToCheckBySendKeys.isEmpty()) {
for (WebElement checkedBySendKeysElement : elementsToCheckBySendKeys) {
log.info("Checking, that element [" + getLocator(checkedBySendKeysElement) + "] is not clickable by sending keys");
try {
checkedBySendKeysElement.sendKeys("checking");
return false;
} catch (Exception e) {
elementsChecked.add(checkedBySendKeysElement);
}
}
}
return elementsChecked.size() == elements.length;
}
Bitte kopieren Sie Ihre HTML-Quelle als Text, kein Bild. – slim
Ich habe den HTML-Quelltext zu dieser Frage hinzugefügt. – SKV