1. 程式人生 > 實用技巧 >Selenium3+python3自動化(八)--登入案例、獲取某元素的某屬性的值.get_attribute("屬性名")

Selenium3+python3自動化(八)--登入案例、獲取某元素的某屬性的值.get_attribute("屬性名")

前言

前面幾篇都是講一些基礎的定位方法,沒具體的案例,下面以開源系統OPMS登入為例。可參考:linux下搭建opms專案

一、登入

1.先開啟瀏覽器

2.開啟opms登入頁:http://ip:8088/login

3.查詢元素之前可以先設定元素等待:implicitlywait()

4.輸入使用者名稱、密碼,然後點登入

參考程式碼:

# coding:utf-8
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://47.98.186.11:8088/login")
driver.implicitly_wait(10)
driver.find_element_by_name("username").send_keys("libai")
driver.find_element_by_xpath("//div[@class='login-wrap']/input[2]").send_keys("123456")
driver.find_element_by_xpath("//button[@type='submit']").click()

 二、檢查結果

1.登入完成之後,需要檢查是否登入成功,這裡就需要有個檢查點,我這邊選擇右上角的賬號,檢視是不是剛才登入的賬號

2.定位到右上角連結,然後取.text方法獲取這個元素的文字屬性

3.判斷獲取的值,與期望結果是否一致

4.符合預期結果測試通過

5.不符合預期結果測試不通過

三、退出登入

1.測試完之後,別忘了最後退出登入

2.退出登入後,關閉瀏覽器

參考程式碼:

# coding:utf-8
from selenium import webdriver
import time
name="libai"
passwd="123456"
host="http://47.98.186.11:8088"
driver=webdriver.Chrome()
# driver.maximize_window()
driver.get(host+"/login")
driver.implicitly_wait(10)
driver.find_element_by_name("username").send_keys(name)
driver.find_element_by_xpath("//div[@class='login-wrap']/input[2]").send_keys(passwd)
driver.find_element_by_xpath("//button[@type='submit']").click()
t=driver.find_element_by_xpath("//ul[@class='notification-menu']/li[2]/a").text
if t==name:
    print("登入成功")
else:
    print("登入失敗")
driver.find_element_by_xpath("//ul[@class='notification-menu']/li[2]/a").click()
time.sleep(3)
a=driver.find_element_by_xpath("//li[@class='open']/ul/li[6]/a").get_attribute("href")
time.sleep(2)
driver.get(a)
time.sleep(2)
driver.close()

---------未解插曲-------

直接定位到退出,點選,報錯:selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable,百度結果:將chromedriver複製到指令碼目錄下,仍然不可以。

--------------------------------------------------

四、登入函式

1.雖然上面的程式碼實現了登入,但整個程式碼跟記流水賬一樣,沒什麼可讀性。

2.我們可以把登入和退出寫成兩個函式,這樣看起來更舒服一點。

3.把登入賬號和密碼引數化。

# coding:utf-8
from selenium import webdriver
import time
def login(driver,host,name,passwd):
    driver.get(host+"/login")
    driver.find_element_by_name("username").send_keys(name)
    driver.find_element_by_name("password").send_keys(passwd)
    driver.find_element_by_xpath("//div[@class='login-wrap']/button").click()
    time.sleep(3)
    a=driver.find_element_by_xpath("//div[@class='menu-right']/ul/li[2]/a").text
    if a==name:
        return True
    else:
        return False
def logout(driver):
    driver.find_element_by_xpath("//div[@class='menu-right']/ul/li[2]/a").click()
    time.sleep(2)
    h=driver.find_element_by_xpath("//li/ul/li[6]/a").get_attribute('href')
    print(type(h),h)
    time.sleep(2)
    driver.get(h)
if __name__=="__main__":
    host="http://47.98.186.11:8088"
    driver=webdriver.Chrome()
    name='libai'
    passwd='123456'
    r=login(driver,host,name,passwd)
    if r:
        print("登入成功")
        logout(driver)
    else:
        print("登入失敗")
    driver.close()

 執行結果:

 

獲取某元素的某屬性的值

a=driver.find_element_by_xpath("//li[@class='open']/ul/li[6]/a").get_attribute("href")