1. 程式人生 > >selenium模組化和資料驅動

selenium模組化和資料驅動

 

模組化

登入模組檔名:publiclogin.py

# coding=utf-8

#登入模組
def login(dr):
    dr.find_element_by_id('login-username').send_keys('username')
    dr.find_element_by_id('login-passwd').send_keys('password')
# coding=utf-8

from selenium import webdriver
from publiclogin import login  #呼叫publiclogin檔案
dr = webdriver.Firefox() dr.get("https://passport.bilibili.com/login") login(dr) #呼叫登入模組,傳入驅動引數 #其他測試內容

 

讀取TXT檔案

讀取行資料:

讀取整個檔案:read()
讀取一行資料:readline()
讀取所有行資料:readlines()

txt檔案如下:

用open開啟檔案之後,要用close關閉檔案

# coding=utf-8

from selenium import webdriver
from time import sleep
from
publiclogin import login #呼叫publiclogin檔案 search = open("searchfile.txt","r") #開啟檔案,只讀 values = search.readlines() #逐行讀取 search.close() #用open開啟檔案之後,要用close關閉檔案 for searchword in values: dr = webdriver.Firefox() dr.get("https://baidu.com") dr.find_element_by_id('kw').send_keys(searchword) dr.find_element_by_id(
'su').click() sleep(1) dr.quit()

 

對TXT檔案的一行資料進行拆分:

# coding=utf-8

from selenium import webdriver
from time import sleep
from publiclogin import login  #呼叫publiclogin檔案


search = open("searchfile.txt","r")  #開啟檔案,只讀
values = search.readlines()  #逐一讀取所有行
search.close()

for searchword in values:
    username=searchword.split(',')[0]  #按逗號分隔,並取第一個陣列
    print username
    password=searchword.split(',')[1]  #按逗號分隔,並取第二個陣列
    print password

 

 

讀取CSV檔案

 建立一個excel檔案,並另存為CSV格式

import csv

#讀取data目錄內的CSV檔案
cust_info = csv.reader(open('./data/custinfo.csv','r'))
for customer in cust_info:
    print customer

 

 

讀取XML檔案

 xml檔案如下:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
    <maxid>10</maxid>
    <login username='Python' passwd='12345678'>
        <caption>python</caption>
        <item id='4'>
            <caption>test</caption>
        </item>
    </login>
    <item id='2'>
            <caption>test2</caption>
        </item>
    </catalog>

 

讀取標籤內的資料:

# coding=utf-8
import xml.dom.minidom

#引入xml檔案
dom = xml.dom.minidom.parse('C:/Users/user/Desktop/python_study/script/data/userlogin.xml')

root = dom.documentElement
logins = root.getElementsByTagName('login')  #注意elements有s

username = logins[0].getAttribute('username')  #logins[0]表示第一個login標籤,getattribute獲取username屬性
print username

password = logins[0].getAttribute('passwd')
print password

 

讀取標籤對件的資料:

import xml.dom.minidom

#讀取當前目錄下data資料夾內的XML檔案
dom = xml.dom.minidom.parse('userlogin.xml')

root = dom.documentElement
captions = root.getElementsByTagName('caption')  #注意elements有s

c1=captions[0].firstChild.data  #獲取第一個caption標籤對間的資料
print c1

c2=captions[1].firstChild.data  #獲取第二個caption標籤對間的資料
print c2

 

模組化和資料驅動綜合案例:

# coding=utf-8

from selenium import webdriverimport sys   #跨目錄獲取檔案
sys.path.append('./public')
from public import publiclogin

dr = webdriver.Firefox()
dr.get("https://passport.bilibili.com/login")

publiclogin.login(dr)  #呼叫登入模組,指定檔案,傳入驅動引數

#其他功能測試
dr.quit()

Python讀取檔案順序為當前目錄—>python安裝目錄—>環境變數

publiclogin檔案存放在public資料夾內,不是當前目錄,也不再安裝目錄下,不能直接獲取到

如果每次都要新增環境比較麻煩,為方便使用,可以呼叫import sys

public檔案內需要有__init__.py檔案,不然無法識別該資料夾內的檔案

__init__.py檔案檔案為空時,寫法如上;如果在__init__.py檔案內import publiclogin,可寫為 from public import *

 

登入模組:

# coding=utf-8
import xml.dom.minidom

#引入xml檔案
dom = xml.dom.minidom.parse('C:/Users/user/Desktop/python_study/script/data/userlogin.xml')

root = dom.documentElement
logins = root.getElementsByTagName('login')  #注意elements有s

username = logins[0].getAttribute('username')  #獲取username

password = logins[0].getAttribute('passwd')  #獲取password#登入模組
def login(dr):
    dr.find_element_by_id('login-username').send_keys(username)  #傳入username
    dr.find_element_by_id('login-passwd').send_keys(password)   #傳入password

xml檔案資料:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
    <maxid>10</maxid>
    <login username='testusername' passwd='testpassword'>
        <caption>python</caption>
        <item id='4'>
            <caption>test</caption>
        </item>
    </login>
    <item id='2'>
            <caption>test2</caption>
        </item>
    </catalog>