先貼一下源碼:
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()
