Automatisierte Webtests (Element konnte nicht gefunden werden)

Inhaltsverzeichnis

1. Frame-/Iframe-Formularverschachtelung

2. Die Seite springt zu einer neuen Registerkarte (Fensterwechsel).

3. Popup-Warnfeld (Warnung/Bestätigung/Eingabeaufforderung)

4. Wenn das Seitenelement den Fokus verliert, läuft das Skript instabil

5. Dynamischer Elementwechsel

6. Die Seite wird nicht geladen und die Seitenelemente werden bedient

7. Elemente sind blockiert, nicht verfügbar, unsichtbar

8. JavaScript-Code ersetzt nicht realisierbare Funktionen

9. Windows-Steuerelemente können während des Datei-Uploads nicht bedient werden

10. Der Browser verfügt über hohe Sicherheit und erlaubt keine domänenübergreifenden Aufrufe zur Fehlermeldung

1. Frame-/Iframe-Formularverschachtelung

        Lösung:driver.switch_to.frame()

frame_element1 = self.driver.find_element(By.XPATH,"//*[@id=\"login_frame\"]")
time.sleep(1)
self.driver.switch_to.frame(frame_element1)
  • driver.switch_to.parent_frame()Wechseln Sie zurück zum übergeordneten Frame
  • driver.switch_to.default_content()Springen Sie zurück zur äußersten Seite

2. Die Seite springt zu einer neuen Registerkarte (Fensterwechsel).

         Problemumgehung :driver.switch_to.window(window_handle) Wechseln Sie zu einem neuen Fenster.

windows = self.driver.window_handles
        self.driver.switch_to.window(windows[1])
#或者for循环遍历
for handle in driver.window_handles:
    # 先切换到该窗口
    wb.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是要操作的窗口
    if '窗口标题' in driver.title:
        # 如果是,那么WebDriver对象就是对应的该窗口,跳出循环
        break

3. Popup-Warnfeld (Warnung/Bestätigung/Eingabeaufforderung)

         Problemumgehung :alert = driver.switch_to.alert , wo

  • Warnfenster: Schaltfläche „Nur Benutzerinformationen abfragen“ bestätigen
  • Bestätigungsfenster: mit Schaltflächen zum Bestätigen und Abbrechen
  • Eingabeaufforderungsfenster: Es gibt Eingabefelder, Bestätigungs- und Abbruchschaltflächen
  • Text: Geben Sie die Textinformationen in Warnung/Bestätigung/Eingabeaufforderung zurück (holen Sie sie ab).
  • akzeptieren(): Akzeptieren Sie das vorhandene Warnfeld
  • dismiss(): Verwerfen Sie das vorhandene Warnfeld
  • send_keys(keys_ToSend): Text an das Benachrichtigungsfeld senden
#切换到alert
        alert = self.driver.switch_to.alert
        print(alert.text)
        sleep(2)
        alert.accept()
#confirm弹框
        self.driver.find_element_by_id('confirm').click()
        confirm = self.driver.switch_to.alert
        print(confirm.text)
        sleep(3)
        #确定
        # confirm.accept()
        #取消
        confirm.dismiss()
#prompt弹框
        self.driver.find_element_by_id('prompt').click()
        prompt = self.driver.switch_to.alert
        print(prompt.text)
        prompt.send_keys('20')
        sleep(3)
        prompt.accept()

4. Wenn das Seitenelement den Fokus verliert, läuft das Skript instabil

        Lösung :driver.switch_to.active_element

driver.switch_to.active_element.send_keys('filename')
time.sleep(2)

5. Dynamischer Elementwechsel

       Lösung : Suchen Sie nach XPATH, drivers.find_element( By.XPATH, "")

6. Die Seite wird nicht geladen und die Seitenelemente werden bedient

        Lösung 1 :WebDriverWait()Warten anzeigen. Warten Sie, bis ein einzelnes Element geladen ist. Dies wird normalerweise mituntil()deruntil_not()Methode verwendet.

 WebDriverWait(driver, 10,0.5).until(driver.find_element( By.CSS_SELECTOR,""))

        Lösung 2 : time.sleep() muss warten. Wenn der nächste Codesatz ausgeführt wird, führt diese Wartemethode nach Ablauf der Zeit die nächste Anweisung aus, es gibt jedoch keine Garantie dafür, dass das Element während der Wartezeit tatsächlich geladen wird.

time.sleep(10) # 表示强行等待10s

        Lösung 3 : Driver.implicitly_wait()  wartet implizit. Dies bedeutet, dass alle Elemente der Seite innerhalb der angegebenen Zeit geladen werden und dann der nächste Schritt ausgeführt wird. Andernfalls warten Sie, bis die Zeit abgelaufen ist, bevor Sie mit dem nächsten Schritt fortfahren.

driver.implicitly_wait(30) #等待30s

7. Elemente sind blockiert, nicht verfügbar, unsichtbar

        Lösung 1 :driver.maximize_window()Aufgrund der Änderung des Seitenelementlayouts aufgrund der Änderung der Fenstergröße wird das getestete Element blockiert und das Fenster kann maximiert werden. Anschließend wird das Element positioniert.
        Lösung 2 :.is_enabled()Aus geschäftlichen Gründen ist das Element in einigen Fällen nicht verfügbar (Elementattribut deaktiviert, ausgegraut). Überprüfen Sie zunächst, ob die Testschritte der Geschäftslogik entsprechen, und bestätigen Sie zweitens, ob es sich um einen Fehler im Geschäftsprozess handelt.
        Lösung 3 :.is_displayed()Bestimmen Sie bei Elementen, deren Attribute nicht unbedingt sichtbar sind, vor der Positionierung zunächst, ob ihre Attribute sichtbar oder ausgeblendet sind.

8. JavaScript-Code ersetzt nicht realisierbare Funktionen

        Lösung 1 : Wenn der Inhalt der Seite zu lang ist und Sie nicht alle Elemente sehen können, selbst wenn das Fenster maximiert ist, können Sie Aktionen wie das Ziehen der Bildlaufleiste durch Ausführen von JavaScript-Skripten implementieren. ( Weitere Methoden zur Implementierung der Bildlaufleiste )

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

        Lösung 2 : Unter der Annahme, dass ein Eingabefeld über id='text' gefunden werden kann, der Textinhalt jedoch nicht über send_keys() eingegeben werden kann, kann dies mit Hilfe von JavaScript-Code realisiert werden. ( Weitere Ergänzungen, Löschungen, Änderungen und Abfragen von Seitenelementen )

text = "input text"
driver.execute_script("var obj=document.getElementById('text'); obj.value=' " + text + " ';")

9. Windows-Steuerelemente können während des Datei-Uploads nicht bedient werden

        Lösung : Für Plug-in-Uploads müssen Windows-Steuerelemente bedient werden. Sie können AutoIt-Tools installieren, Skripte schreiben, sie als „.au3“-Dateien speichern, in „.exe“-Dateien konvertieren und sie dann automatisiert hoch-/herunterladen Skripteos.system("D:\\upfile.exe").

10. Der Browser verfügt über hohe Sicherheit und erlaubt keine domänenübergreifenden Aufrufe zur Fehlermeldung

        Lösung 1 : Legen Sie im Browser „about:config“ „signed.applets.codebase_principal_support = true“ fest (geben Sie zum Festlegen „about:config“ in die Adressleiste ein)

        Lösung 2 : Fügen Sie den folgenden Code vor der Open-Code-Funktion hinzu:

try { 
      netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
      } 
catch (e) { 
      alert("Permission UniversalBrowserRead denied."); 
      } 

Guess you like

Origin blog.csdn.net/m0_58807719/article/details/130117450