1. 程式人生 > 實用技巧 >Selenium3+python3自動化(三十五)--登入方法(引數化)

Selenium3+python3自動化(三十五)--登入方法(引數化)

前言

登入這個場景在寫用例的時候經常會有,我們可以把登入封裝成一個方法,然後把賬號和密碼引數化,這樣以後用的登入的時候,只需呼叫這個方法就行了。

一、登入方法

1.把輸入賬號、輸入密碼、點選登入按鈕三個步驟寫成一個方法

2.然後把輸入的賬號和密碼引數化

下面以開源專案OPMS為例,搭建OPMS系統

# coding:utf-8
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://47.98.186.11:8088/login")
def login(user,passwd):
    driver.find_element_by_name("username").send_keys(user)
    driver.find_element("name","password").send_keys(passwd)
    driver.find_element_by_xpath("//button[@type='submit']").click()
login("libai","123456")

二、用例

1.下面的用例可以呼叫前面寫的登入方法,這樣不用每次都去寫登入流程

2.判斷是否登入成功,我這裡取的登入成功後的賬戶名  

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver=webdriver.Chrome()
def login(url,user,passwd):
    driver.get(url)
    driver.find_element_by_name("username").send_keys(user)
    driver.find_element("name","password").send_keys(passwd)
    driver.find_element_by_xpath("//button[@type='submit']").click()
    name=WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//div[@class='menu-right']/ul/li[2]/a")).text
    #清除所有cookies
    driver.delete_all_cookies()
    return name==user
url="http://47.98.186.11:8088/login"
print(login(url,"libai","123456"))
print(login(url,"xi","333"))

 執行結果:

True
Traceback (most recent call last):
  File "E:/study/selenium_study/a825.py", line 16, in <module>
    print(login(url,"xi","333"))
  File "E:/study/selenium_study/a825.py", line 10, in login
    name=WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//div[@class='menu-right']/ul/li[2]/a")).text
  File "D:\Program Files\python37\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

 三、判斷方法

1.如果用上面的方法去判斷的話,有個缺陷,當登入不成功的時候,頁面是不會跳轉的,所以會報異常

2.這個時候,可以加python異常處理:try,except

參考:https://www.runoob.com/python/python-exceptions.html

# coding:utf-8
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver=webdriver.Chrome()
def login(url,user,passwd):
    driver.get(url)
    driver.find_element_by_name("username").send_keys(user)
    driver.find_element("name","password").send_keys(passwd)
    driver.find_element_by_xpath("//button[@type='submit']").click()
    try:
        name=WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//div[@class='menu-right']/ul/li[2]/a")).text
        #清除所有cookies
        driver.delete_all_cookies()
        return name==user
    except:
        return False
url="http://47.98.186.11:8088/login"
print(login(url,"libai","123456"))
print(login(url,"xi","333"))

 執行結果:

True
False