【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()
不积跬步,无以致千里;不集小流,无以成江海。
如转载本文,请还多关注一下我的博客:https://www.cnblogs.com/Owen-ET/;
我的Github地址:https://github.com/Owen-ET————————————
无善无恶心之体, 有善有恶意之动, 知善知恶是良知, 为善去恶是格物。