【Selenium+Python Webdriver】報錯之:TypeError: user_login() missing 1 required positional argument: 'self'


先貼一下源碼:

base.py文件如下:

from selenium import webdriver

class Page(object):
    '''
    頁面基礎類,用於所有頁面的繼承
    '''

    rb_url = 'http://XXXXX'

    def __init__(self,selenium_driver,base_url=rb_url):
        self.driver = selenium_driver
        self.base_url = base_url
        self.timeout = 30

    def on_page(self):
        return self.driver.current_url == (self.base_url + self.url)

    def open(self):
        self._open(self.url)

    def _open(self,url):
        url = self.base_url + url
        self.driver.get(url)
        assert self.on_page(),'url is NOT%s' %url

    def find_element(self,*loc):
        return self.driver.find_element(*loc)

    def find_elements(self,*loc):
        return self.driver.find_element(*loc)

    def script(self,src):
        return self.driver.execute_script(src)

loginPage.py文件如下:

from base import Page
from selenium.webdriver.common.by import By
from selenium import webdriver



class login(Page):

    url = ''

    login_username_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input1")
    login_password_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input2")
    login_button_loc = (By.CSS_SELECTOR,"button[type=submit]")

    def login_username(self,username):
        self.find_element(*self.login_username_loc).send_keys(username)

    def login_password(self,password):
        self.find_element(*self.login_password_loc).send_keys(password)

    def login_button(self):
        self.find_element(*self.login_button_loc).click()

#定義統一登錄口
def user_login(self,username='zc',password='1'):
    self.open()
    self.login_username(username)
    self.login_password(password)
    self.login_button()

if __name__ == '__main__':
    user_login()

 

運行時報錯:

TypeError: user_login() missing 1 required positional argument: 'self'

經查詢是因為self丟失了要傳遞的參數。

 

解決方法如下:

一、定義的user_login()位置不動,把self替換引參數,見下面:

#定義統一登錄口
def user_login(driver = webdriver.Chrome(),username='zc',password='1'):
    loginPage = login(driver)
    loginPage.open()
    loginPage.login_username(username)
    loginPage.login_password(password)
    loginPage.login_button()

二、定義的user_login()移動到class中,self會指向base.py文件的selenium_driver無參數

TypeError: __init__() missing 1 required positional argument: 'selenium_driver'

 

完整修改代碼如下:

base.py文件修改:

    def __init__(self,selenium_driver = webdriver.Chrome(),base_url=rb_url):
        self.driver = selenium_driver
        self.base_url = base_url
        self.timeout = 30

loginPage.py文件修改如下:

from base import Page
from selenium.webdriver.common.by import By
from selenium import webdriver



class login(Page):

    url = ''

    login_username_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input1")
    login_password_loc = (By.CSS_SELECTOR,"#_easyui_textbox_input2")
    login_button_loc = (By.CSS_SELECTOR,"button[type=submit]")

    def login_username(self,username):
        self.find_element(*self.login_username_loc).send_keys(username)

    def login_password(self,password):
        self.find_element(*self.login_password_loc).send_keys(password)

    def login_button(self):
        self.find_element(*self.login_button_loc).click()

    #-->移動到class中,定義統一登錄口
    def user_login(self,username='zc',password='1'):
        self.open()
        self.login_username(username)
        self.login_password(password)
        self.login_button()

if __name__ == '__main__':
   #需要引用才可以,參考地址
login().user_login()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM