Seite 1 von 1

TypeError: this constructor takes no arguments

Verfasst: Mittwoch 14. Dezember 2022, 13:44
von pixelhead
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

Re: TypeError: this constructor takes no arguments

Verfasst: Mittwoch 14. Dezember 2022, 14:02
von sparrow
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?

Re: TypeError: this constructor takes no arguments

Verfasst: Mittwoch 14. Dezember 2022, 14:52
von pixelhead
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;