zoukankan      html  css  js  c++  java
  • 【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()
  • 相关阅读:
    NET Core入门笔记
    NET Core入门笔记
    NET Core入门笔记
    也许,这样理解HTTPS更容易
    也许,这样理解HTTPS更容易
    也许,这样理解HTTPS更容易
    10 个实战及面试常用 Shell 脚本编写
    10 个实战及面试常用 Shell 脚本编写
    10 个实战及面试常用 Shell 脚本编写
    7617:输出前k大的数
  • 原文地址:https://www.cnblogs.com/Owen-ET/p/8559454.html
Copyright © 2011-2022 走看看