【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()

 

posted @ 2018-03-13 17:33  Owen_ET  阅读(9568)  评论(0编辑  收藏  举报