Warum sind einige Elemente vorhanden, können aber nicht interagiert/angezeigt werden?

Lesezeit: 3 Minuten

Warum sind einige Elemente vorhanden konnen aber nicht interagiertangezeigt werden
Sachin

Ich bin ziemlich neu im Testen und versuche, ein besseres Verständnis dafür zu bekommen, was genau vor sich geht. Ich stelle fest, dass einige unserer Testcodes fehlschlagen, wenn an das CSS-Selektorelement ein WaitUntilCanInteract oder ein WaitUntilDisplayed angehängt ist, obwohl das Element bei einer Chrominspektion im Browser angezeigt wird. Wenn Sie sie in ein WaitUntilExists ändern, gelangen sie an einen vorübergehenden Punkt, also habe ich mich gefragt, was genau vor sich geht, um diese Situation zu schaffen?

Selen befasst sich genau mit drei einzigartigen Zuständen eines Elements.

  • Vorhandensein des Elements innerhalb des html: Dieser Zustand eines Elements kann durch die erkannt werden Erwarteter Zustand presenceOfElementLocated() wo die Erwartung ist zu prüfen, ob das Element ist gegenwärtig in dem Dom einer Seite. Dies bedeutet nicht unbedingt, dass das Element ist sichtbar.

    • Beispiel:

      WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("css_of_element")));
      
  • Sichtbarkeit des Elements innerhalb des html: Dieser Zustand eines Elements kann durch die erkannt werden Erwarteter Zustand visibilityOfElementLocated() wo die Erwartung ist zu prüfen, ob das Element ist gegenwärtig in dem Dom einer Seite und sichtbar. Sichtbarkeit bedeutet, dass das Element nicht nur angezeigt wird, sondern auch eine Höhe und Breite das ist größer als 0.

    • Beispiel:

      WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("css_of_element")));
      
  • Anklickbares Element: Dieser Zustand eines Elements kann durch die erkannt werden Erwarteter Zustand elementToBeClickable() wo die Erwartung ist zu prüfen, ob das Element sichtbar und aktiviert damit Sie es anklicken können.

    • Beispiel:

      WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("css_of_element")));
      

Eine ausführliche Diskussion finden Sie in Selenium: Check for the present of element

Nun, die Entwickler haben beschlossen, es so zu machen.

Sehen Sie, die Elemente können auf dem DOM existieren, aber unsichtbar oder nicht interagierbar sein. Aber nicht umgekehrt.

Wenn Ihre Tests bei „waitingUntilExists“ bestanden werden und andernfalls fehlschlagen, müssen Sie wahrscheinlich die Wartezeit verlängern, wenn Sie sie bestehen möchten. Aber das ist nur meine Vermutung, ohne Ihren Code zu sehen.

  • Ah ok das macht Sinn. Ja, ich bin sicher, es ist schwierig, zu sehr ins Detail zu gehen, ohne es zu sehen, ich wollte mehr eine allgemeine Vorstellung davon bekommen, warum, was diese Antwort hilfreich war. Wenn es weiterhilft, passierte dies einmal auf einer Minikarte, die auftauchte, wenn die Maus darüber schwebte. Dieses Element war nur mit Javascript-Code anklickbar, wurde aber erneut als „false“ angezeigt, wenn Sie gefragt wurden, ob das Element angezeigt wurde (obwohl die Maus darüber bewegt wurde und ich das Element in den Chrome-Tools sehen konnte), ergab sich jedoch als „true“, wenn es existierte.

    – Sachin

    28. August 2019 um 13:52 Uhr

Warum sind einige Elemente vorhanden konnen aber nicht interagiertangezeigt werden
Shakir Mushtaq

Die einfache Antwort ist, dass Designer manchmal, wenn sie an Webseiten arbeiten, insbesondere wenn sie am Foundation CSS-Framework oder Bootstrap arbeiten, absichtlich die ursprünglichen CSS/HTML-Tags und -Elemente ausblenden, während sie Foundation- oder Bootstrap-basierte Design-Overlays wie ausgefallene Schaltflächen auf der Seite platzieren, die das Original verursachen Elemente ausgeblendet werden.

Der beste Ansatz kann wie folgt aussehen:

I. Sie können ein WebElement deklarieren, während Sie ein Element aufrufen, um es genau anzuvisieren, und den Befehl moveToElement verwenden, anstatt einfach FindElement.By.xxxxx aufzurufen, z.

//*** Calling a WebElement and using moveToElement command***//

WebElement (anyElementname) = browser.findElement(By.partialLinkText("xxxxxxxxxxx"));
          action.moveToElement(anyElementname).perform();
//*** Waiting for 8 seconds***//          
Thread.sleep(8000, 80000);

II. Sie können „Waits“ verwenden, um Seitenladezeiten bereitzustellen und zwischen Elementen zu interagieren

III. Vermeiden Sie das Kopieren des überlagerten CSS-Elements, insbesondere xpath, kopieren Sie stattdessen den xpath aus der ursprünglichen Quelle von Div/button/li

Lassen Sie mich wissen, ob es für Sie funktioniert oder nicht. Prost!

996110cookie-checkWarum sind einige Elemente vorhanden, können aber nicht interagiert/angezeigt werden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy