element 登錄_Python selenium自動化測試框架入門實戰--登錄測試案例

811aa59ede9c893b2eef9df237669100.png

本文為Python自動化測試框架基礎入門篇,主要幫助會寫基本selenium測試代碼又沒有規劃的同仁。

本文應用到POM模型、selenium、unittest框架、configparser配置文件、smtplib郵件發送、HTMLTestRunner測試報告模塊結合登錄案例實現簡單自動化測試框架

項目主要包括以下幾個部分

f671568794ba16a4bcf5731dfa023ee3.png

conif.ini 放置配置文件

例如:

91477578492ef088422645a3312de350.png

myunit.py文件放置的瀏覽器操作代碼


import unittest

from selenium import webdriver

class MyTest(unittest.TestCase):

def setUp(self):

self.driver = webdriver.Chrome()

self.driver.implicitly_wait(10)

self.driver.maximize_window()

def tearDown(self):

self.driver.quit()

if __name__=='__main__':

unittest.main()


base.py中放置瀏覽器對象操作代碼


from selenium.webdriver.supportimport expected_conditionsas EC

from selenium.webdriver.support.waitimport WebDriverWait

import os,configparser

class Page(object):

path = os.path.dirname(os.path.abspath("."))

cfpath = os.path.join(path,'autoparkerconfigconf.ini')

conf = configparser.ConfigParser()

conf.read(cfpath)

url=conf.get('base','url')

def __init__(self,driver,url=url):

self.driver=driver

self.url=url

def open(self):

self.driver.get(self.url)

def find_element(self,*loc):#傳入參數為元組需要加*,本身就是元組的不需要*

#print(*loc)

try:

WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))

return self.driver.find_element(*loc)

except:

print('頁面中未找到 %s 元素'%(self,loc))

def find_elements(self,*loc):

return self.driver.find_elements(*loc)

def send_keys(self,loc,value):

self.find_element(*loc).send_keys(value)

def click(self,loc):

self.find_element(*loc).click()

def clear(self,loc):

self.find_element(*loc).clear()


loginpage.py中放置通用登錄模塊代碼(盡量避免重復代碼)


from selenium.webdriver.common.byimport By

from timeimport sleep

from objpage.baseimport Page

class login(Page):

username_loc=(By.NAME,'accounts')

password_loc=(By.NAME,'pwd')

login_button_loc=(By.XPATH,'/html/body/div[5]/div/form/fieldset/p/button')

login_error_loc=(By.XPATH,'//*[@id="common-prompt"]/p')

def login_username(self,username):

self.find_element(*self.username_loc).clear()

self.find_element(*self.username_loc).send_keys(username)

def login_password(self,password):

self.find_element(*self.password_loc).clear()

self.find_element(*self.password_loc).send_keys(password)

def login_button(self):

self.find_element(*self.login_button_loc).click()

#統一登錄入口

def user_login(self,username,password):

self.open()

self.login_username(username)

self.login_password(password)

self.login_button()

sleep(2)

#登錄提示信息

def login_error_text(self):

return self.find_element(*self.login_error_loc).text


parker.py中放置公共元素操作代碼(parker是我隨便命名的,不糾結)


from seleniumimport webdriver

from selenium.webdriver.common.action_chainsimport ActionChains

from selenium.webdriver.support.selectimport Select

class Parker(object):

def __init__(self,browser='chrome'):

if browser=='ie' or browser=='internet explorer':

driver=webdriver.Ie()

elif browser=='firefox' or browser=='ff':

driver=webdriver.Firefox()

elif browser=='chrome':

driver=webdriver.Chrome()

try:

self.driver=driver

except Exception:

raise NameError('沒有找到瀏覽器,請輸入"ie","chrome","ff"')

def wait(self,secs=5):#隱式等待

self.driver.implicitly_wait(secs)

def to_element(self,key):#元素定位

if '->' not in key:#如果key里面不包含=就執行下列語句

raise NameError('參數類型輸入錯誤')

by=key.split('->')[0]#通過分隔獲取[0]對應的值

val=key.split('->')[1]#通過分隔獲取[1]對應的值

if by=='id':

element=self.driver.find_element_by_id(val)

elif by=='name':

element=self.driver.find_element_by_name(val)

elif by=='class':

element=self.driver.find_element_by_class_name(val)

elif by=='link_text':

element=self.driver.find_element_by_link_text(val)

elif by=='xpath':

element=self.driver.find_element_by_xpath(val)

elif by=='css':

element=self.driver.find_element_by_css_selector(val)

else:

raise NameError('請輸入正確的定位方式:id,name,class,link_text,xpath,css')

return element

def open(self,url):#打開一個URL

self.driver.get(url)

def max_window(self):#最大化窗口(瀏覽器)

self.driver.maximize_window()

def set_windows(self,wide,high):#設置窗口大小

self.driver.set_window_size(wide,high)

def input(self,key,text):#對文本框進行輸入

el=self.to_element(key)

el.send_keys(text)

def click(self,key):#點擊

el=self.to_element(key)

el.click()

def clear(self,key):#清除文本框內容

el=self.to_element(key)

el.clear()

def right_click(self,key):#右鍵操作

el=self.to_element(key)

ActionChains(self.driver).context_click(el).perform()

def move_to_element(self,key):#鼠標懸停

el=self.to_element(key)

ActionChains(self.driver).move_to_element(el).perform()

def drag_and_drop(self,el_key,ta_key):#拖拽 從一個元素拖到另外一個元素

el=self.to_element(el_key)

target=self.to_element(ta_key)

ActionChains(self.driver).drag_and_drop(el,target).perform()

def click_text(self,text):

self.driver.find_element_by_partial_link_text(text).click()

def close(self):#關閉當前瀏覽器窗口

self.driver.close()

def quit(self):#退出瀏覽器

self.driver.quit()

def submit(self,key):#提交事件

el=self.to_element(key)

el.submit()

def F5(self):#刷新

self.driver.refresh()

def js(self,script):#執行js

self.driver.execute_script(script)

def get_attribute(self,key,attribute):#獲取元素屬性

el=self.to_element(key)

return el.get_attribute(attribute)

def get_text(self,key):#獲取text

el=self.to_element(key)

return el.text

def get_title(self):#獲取title

return self.driver.title

def get_url(self):#獲取url

return self.driver.current_url

def to_frame(self,key):#窗口切換

el=self.to_element(key)

self.driver.switch_to.frame(el)

def alert_accept(self):#對話框確認操作

self.driver.switch_to.alert.accept()

def alert_dismiss(self):#對話框取消操作

self.driver.switch_to.alert.dismiss()

def img(self,fp):#截圖

self.driver.get_screenshot_as_file(fp)

def select_by_value(self,key,value):#下拉框操作

el=self.to_element(key)

Select(el).select_by_value(value)


send_email.py放置郵件發送代碼


import smtplib

from email.mime.textimport MIMEText

from email.mime.multipartimport MIMEMultipart

import configparser

import os

def sendEmail(file_path):

path=os.path.dirname(os.path.abspath("."))

cfpath=os.path.join(path,'autoparkerconfigconf.ini')

conf = configparser.ConfigParser()

conf.read(cfpath)

smtpserver = conf.get('emailqq','smtpserver')

sender = conf.get('emailqq','sender')

pwd = conf.get('emailqq','pwd')

receiver=[]

email_to=conf.get('emailqq','receiver')

email_array=email_to.split(';')

for iin range(len(email_array)):

receiver.append(email_array[i])

print(receiver)

with open(file_path,'rb')as fp:

mail_boby=fp.read()

msg=MIMEMultipart()

msg['From']=sender

msg['To']=",".join(receiver)

msg['Subject']='我曾把完整的鏡子打碎'

body=MIMEText(mail_boby,'html','utf-8')

msg.attach(body)

att=MIMEText(mail_boby,'html','utf-8')

att['Content-Type']='application/octet-stream'

att['Content-Disposition']='attachment;filename="test_reuslt.html"'

msg.attach(att)

try:

smtp=smtplib.SMTP()

smtp.connect(smtpserver)

smtp.login(sender,pwd)

except:

smtp=smtplib.SMTP_SSL(smtpserver,465)

smtp.login(sender,pwd)

smtp.sendmail(sender,receiver,msg.as_string())

smtp.quit()

sendEmail('D:report.html')


最后main.py文件放置的就是運行代碼(執行這個文件進行測試就可以)



import HTMLTestRunner

import unittest

from test_case.loginimport loginTest

from public.send_emailimport sendEmail

if __name__=='__main__':

testunit=unittest.TestLoader().loadTestsFromTestCase(loginTest)

suite=unittest.TestSuite(testunit)

file_path="D:html_report.html"

fp=open(file_path,'wb')

runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='登錄測試',description='測試執行結果')

runner.run(suite)

fp.close()

sendEmail(file_path)


今天就先到這里,一個入門級的自動化測試框架,由于是非專業開發自學,拿出來給大家分享,編程代碼可能有點不規范,命名也很隨意。大家先將就著看吧!回頭慢慢完善。

還要多向大佬們學習。

備注:有想一起自學的朋友可以看配置文件代碼,一起交流。三人行必有我師焉

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

后處理安裝_Mastercam2017(自定義后處理選項)安裝!

我們用Mastercam2017編程的程序,需要用在不同的機床加工零件時,這時候我們也要選擇適合不同機床認識的自動后處理文件來生成程序,當然系統默認是不能實現這一功能的,那么安裝了自定義后處理選項插件,就能完全實現自定義…

項目一計算機基礎知識考核題,2013計算機基礎知識試題及答案

2013年10月《計算機基礎》階段測試自評成績:一、單項選擇題 (每小題2分)1.世界上第一臺電子數字計算機取名為( )。A.UNIVACB.EDSACC.ENIACD.EDVAC2.個人計算機簡稱為PC 機,這種計算機屬于( )。 A.微型計算機 B.小型計算機 C.超級計算機 D.巨型計算機3.目…

為什么redis取出來是null_[2020] Redis 最新面試題

Redis 的數據類型(數據結構)string (二進制安全,可以存儲任意類型的數據)list(鏈表)字典(就是hashmap)set(不重復無序的hashmap)zset(…

的優先級大小_如何評估需求的優先級?

一、 需求的優先級怎么定義? 很多產品經理,包括我,一定都會遇到這樣的場景:“ 需求堆如山,什么都想做 ”。面對各種各樣、來自各個渠道的需求,產品經理的工作職責之一,就是梳理需求的優先級。我…

html5 drawimage 不顯示,canvas的drawImage無法顯示圖像

window.οnlοadfunction(){var Canvasdocument.getElementById("canvas");var cxtCanvas.getContext("2d");var bgnew Image();//你指定了圖片的地址,但是圖片的加載是需要時間的bg.src"../img/2-14020314314A26.jpg";//執行完上面一…

html自動給圖片加上水印 代碼_如何給一千張圖片去水印?還好我會python,100行代碼輕松搞定...

寫在前面近期好多網友私信我,問我編程該怎么學習、怎么入門。我覺得編程學習,就像寫文章一樣,需要積累。如果把代碼每個字符拆開,大伙都認識,但是組合在一起,就是另外一回事了。所以我的建議是,…

html中兩個圖片疊放,CSS實現圖片疊放(勾選圖標)

場景我們經常會遇到這種場景,有一個待選圖片列表,在圖片上(可能是右上角也有可能時右下角)疊放一個勾選狀態圖標,這篇文章就記錄實現這個功能的過程。原理利用flex布局space-around顯示圖片列表在圖片的外層加一個div,同時把勾選狀…

pyspark sparksession_PySpark 處理數據和數據建模

安裝相關包from pyspark.sql import SparkSession from pyspark.sql.functions import udf, when, count, countDistinct from pyspark.sql.types import IntegerType,StringType from pyspark.ml.feature import OneHotEncoderEstimator, StringIndexer, VectorAssembler from…

html loader使用方法,webpack中loader的使用方法,以及幾個常用loader的應用小實例

loader:是webpack用來預處理模塊的,在一個模塊被引入之前,會預先使用loader處理模塊的內容。可能,你會遇到當你用webpack打包的時候,提示你需要一個loader來處理文件,那webpack中的loader就是幫助預處理下模…

linq查詢不包含某個值的記錄_MySQL行(記錄)的詳細操作

閱讀目錄一 介紹二 插入數據INSERT三 更新數據UPDATE四 刪除數據DELETE五 查詢數據SELECT六 權限管理一 介紹MySQL數據操作: DML在MySQL管理軟件中,可以通過SQL語句中的DML語言來實現數據的操作,包括使用INSERT實現數據的插入UPDATE實現數據的…

聽課評課記錄計算機應用,教師聽課的評語(精選10篇)

教師聽課的評語(精選10篇)通過引導學生提煉信息提出問題解決問題,使學生再次感受了數學與現實生活的密切聯系,經歷了運用乘法口訣求商的計算方法的形成過程,培養了學生對知識的遷移能力。下面是小編整理的教師聽課的評語(精選10篇)&#xff0…

java音頻實時傳輸_會議室智能系統建設方案,實時遠程視頻協作

2019年,預計會議協作需求將持續增長,創建多功能會議室促進本地、異地協作仍然是一個強大的趨勢。無論空間大小或距離遠近,政府部門、企業單位以及團體組織為了實現決策指令暢通、管理層次分明,需要通過對會議室環境、多功能會議系…

依賴 netty spring_十分鐘帶你了解Spring的七大知識點,程序員必了解

Spring框架自誕生以來一直備受開發者青睞,有人親切的稱之為:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解決方案。很多研發人員把spring看作心目中最好的java項目,沒有之一。所以這是重點也是難點&…

南通大學計算機組成原理期末考試題,南通大學計算機組成原理期末考試范圍.docx...

南通大學計算機組成原理期末考試范圍計算機組成原理選擇填空題 15分填空題 20 分計算題 50分設計題 15分第一章計算機的主要性能指標馮諾依曼型計算機的體系結構、組成部分控制器的基本任務計算機系統的層次結構第二章數據與文字的表示方法定點數的表示方法數的機器碼表示校驗碼…

android實現手機拍照以及圖片預覽功能_手機系統將有A/B分區?Android 11這些變化你關注過嗎...

跳票讓Android 11沉淀下來并吸引了更多的消費者,在iPhone SE大規模進軍主流消費市場的今天,Android這邊難道不想依靠新系統扳回一局嗎?在人們感嘆iOS一些功能似曾相似的時候,Android 11新的突破與創新格外讓人振奮。01Android 11欲…

小程序的點贊功能能和瀏覽次數功能_掃碼點餐小程序好用嗎?小程序還能實現哪些功能?...

有不少的餐廳現在都可以用小程序掃碼點餐了,為什么現在很少用公眾號點餐了?原因其實很簡單,用公眾號點餐用戶還要關注公眾號,第二個就是在于公眾號每天發消息很煩,而小程序則沒有這樣的煩惱,只在使用的時候…

word計算機課教學反思,《WORD》初中信息技術的教學反思

《WORD》初中信息技術的教學反思本節課在建構主義學習理論指導下,采用“任務驅動”教學策略,借助多媒體課件,對學生實施研究式自主學習教學模式,教學中注重培養學生分析問題、解決問題的能力。通過學習和實際操作,培養…

simulink中mask設置_(實現BPSK學習Verilog)1. Simulink仿真實現

歡迎關注BUG記錄知乎專欄和BUG記錄公眾號,關注BUG記錄公眾號回復101獲取本文使用的Simulink仿真文件微信號:BugRec由于最近研究某個高速接口沒什么實質性的突破,實在寫不出太好的東西,所以就寫點更為基礎的東西分享給大家&#xf…

arima模型_[不說人話系列]-ARIMA模型

看文獻的時候看到幾個統計推理的模型,想要大概了解,想做個系列,記錄自己胡說八道的數理筆記過程。如有錯誤,感謝您指正。文前感謝馮小姐詳細認真的技術援助!1- 名稱簡稱:ARIMA模型英文名:Auto r…

認識計算機網絡試講稿,操作系統簡介試講教案.pdf

學習必備 歡迎下載課題 操作系統簡介內容章節:第二章第一節 課型:新授課教學時間: 本節內容共授課2課時 授課班級:學習者分析:學生通過第一章的學習,對計算機的軟、硬件知識有了初步的了解,。但由于學生普遍對計算機理…