TypeError: this constructor takes no arguments

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pixelhead
User
Beiträge: 12
Registriert: Donnerstag 27. Oktober 2022, 16:35

Hallo zusammen,

ich komme einfach nicht drauf und der bisherige Hinweis den ich fand auf __init__ verstehe ich nicht.

Es geht um ein Testscript für bzw. mit Selenium.

Ich bekomme immer eine Fehlermeldung zur Zeile 52, die fängt so an:

Code: Alles auswählen

iframePage = SeleniumKursIFramePage(self.driver)
        iframePage.aktiviere_iframe()
Vollständige Fehlermeldung:

Code: Alles auswählen

Error
Traceback (most recent call last):
  File "C:\Python27\Lib\unittest\case.py", line 329, in run
    testMethod()
  File "C:\Robot\untitled\SeleniumProjektAbschnitt2\tests\test_web_elemente_iframe_selenium_kurs_firefox.py", line 52, in test_iframe
    iframePage = SeleniumKursIFramePage(self.driver)
TypeError: this constructor takes no arguments
Hier der vollständige Code der Datei "test_web_elemente_iframe_selenium_kurs_firefox.py"

Code: Alles auswählen

# This Python file uses the following encoding: utf-8
import unittest

from selenium import webdriver

from pages.seleniumkurs_login_page import SeleniumKursLoginPage
from pages.selniumkurs_home_page import SeleniumKursHomePage
from pages.seleniumkurs_test_app_page import SeleniumKursTestAppPage
from pages.seleniumkurs_iframe_page import SeleniumKursIFramePage

class TestIFrameSeleniumKursFirefox(unittest.TestCase):

    def setUp(self):
        print("+++ Initialisierung WebDriver")
        self.driver = webdriver.Firefox()
        self.driver.maximize_window()
        self.driver.get("https://seleniumkurs.codingsolo.de")

    def tearDown(self):
        print("+++ tearDown nach jedem Test. Aufräumen.")
        self.driver.close()

    def test_iframe(self):
        print("+++ FIREFOX Start Test iFrame")

        ## Arrange

        # Login
        loginPage = SeleniumKursLoginPage(self.driver)
        loginPage.zugangsdaten_eingeben("Benutzername", "Passwort")
        loginPage.login_button_anklicken()

        # Navigation durch das Portal
        homePage = SeleniumKursHomePage(self.driver)
        homePage.hauptmenu_aufrufen()
        homePage.selenium_test_app_anklicken()
        
        # Sprung zum iFrame
        print("+++ Sprung zur iFrame Seite")

        testAppPage = SeleniumKursTestAppPage(self.driver)
        testAppPage.iframe_beispiel_anklicken()

        print("+++ Sprung zum iFrame")
        iframePage = SeleniumKursIFramePage(self.driver)
        iframePage.aktiviere_iframe()

        # Starte iFrame Beispiel mit Eingabe und Button

        ## Act
        print("+++ Texteingabe und Button klicken")
        iframePage.namen_eingeben()
        iframePage.alert_anklicken()
        
        ## Assert

        print("+++ Prüfung Inhalt Alertbox")
        self.assertTrue('Dieter' in iframePage.alert_box_auslesen())
        iframePage.alert_box_wegklicken()

if __name__ == '__main__':
    unittest.main()
Die zugehörige Datei in der die Webelemente angesprichen werden, die Page Datei, ist diese hier "pages.seleniumkurs_iframe_page.py":

Code: Alles auswählen

from selenium.webdriver.common.by import By


class SeleniumKursIFramePage:

    INPUT_NAME = (By.ID, "name")
    BTN_ALERT = (By.ID, "alertbtn")

    def __self__(self, driver):
        self.driver = driver

    def aktiviere_iframe(self):
        self.driver.switch_to.frame("iframe")

    def namen_eingeben(self, namen):
        self.driver.find_element(*self.INPUT_NAME).send_keys(namen)

    def alert_anklicken(self):
        self.driver.find_element(*self.BTN_ALERT).click()

    def alert_box_auslesen(self):
        return self.driver.switch_to.alert.text

    def alert_box_wegklicken(self):
        self.driver.switch_to.alert.accept()
Ich finde keinen Fehler und es sieht bei mir exakt so aus wie im Kursvideo.

Hat jemand eine Idee?

Vielen Dank und viele Grüße
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Die Antwort hast du dir schon selbst gegeben: SeleniumKursIFramePage hat keine __init__-Methode. Damit erwartet es bei der Initialisierung auch keine Parameter.
Hast du dich verschrieben und die __self__-Methode ist da falsch?
pixelhead
User
Beiträge: 12
Registriert: Donnerstag 27. Oktober 2022, 16:35

Oh ha, da habe ich mich selbst ausgetrickst, ja, verschrieben.

Danke!

Vorher, falsch:

Code: Alles auswählen

def __self__(self, driver):
    self.driver = driver
So ist es richtig:

Code: Alles auswählen

    def __init__(self, driver):
        self.driver = driver;
Antworten