第三章:Python Selenium 自動化測試之Python基礎

Python的安裝(簡單提下)

Python下載地址:

https://www.python.org/downloads/

Python的安裝配置教程:https://jingyan.baidu.com/article/c45ad29c18fc0b051653e272.html

安裝selenium第三方庫:在命令臺窗口下輸入命令pip install selenium 安裝 ,在安裝selenium的庫的時候可能會遇到一些無法安裝的問題,可以在評論留言,我們一起探討。

Python基礎(參考菜鳥教程)

Python 中文編碼問題

這個問題存在於python2.x版本中,python2 對中文的支持不太好,python2中默認的編碼格式是 ASCII 格式,在沒修改編碼格式時無法正確打印漢字,所以在讀取中文時會報錯。解決方法為只要在文件開頭加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了,注意必須是開頭,在python3中沒有這個問題,python3.x 源碼文件默認使用utf-8編碼,所以可以正常解析中文,無需指定 UTF-8 編碼。

Python註釋(註釋不會被編譯器執行)

Python註釋分三種:單行註釋、多行註釋、特殊註釋

單行註釋:使用#號

如# print('hello,world!')

多行註釋:多行註釋需要使用到到三對引號,這裡的引號單引號和雙引號都行。

如""" 這裡是註釋的內容 """

特殊註釋(包括中文註釋和跨平臺註釋)

中文註釋:如果需要在代碼中使用中文註釋,必須在python文件的最前面加上,如:#_*_ coding:utf-8 _*_

跨平臺註釋:如果需要使python程序運行在Windows以外的平臺上,則需要在python文件的最前面加上,如:!# /usr/bin/python

Python 變量

變量的概念變量存儲在內存中的值。這就意味著在創建變量時會在內存中開闢一個空間。基於變量的數據類型,解釋器會分配指定內存,並決定什麼數據可以被存儲在內存中。因此,變量可以指定不同的數據類型,這些變量可以存儲整數,小數或字符。python中的變量不需要定義,但是使用前必須賦值,否則就會報錯。使用'='來為變量賦值

範例一:變量賦值並輸出

# -*- coding: UTF-8 -*-

counter = 100 # 賦值整型變量

miles = 1000.0 # 浮點型

name = "John" # 字符串

print counter

print miles

print name

範例二:同時為多個變量賦值

a = b = c = 1

範例三:為多個對象指定多個變量

a, b, c = 1, 2, "john"

以上實例,兩個整型對象1和2的分配給變量 a 和 b,字符串對象 "john" 分配給變量 c

Python數據類型

數字數據類型用於存儲數值。它們是不可改變的數據類型,這意味著改變數字數據類型會分配一個新的對象。當你指定一個值時,Number對象就會被創建,Python 定義了一些標準類型,用於存儲各種類型的數據,Python有六個標準的數據類型:

布爾類型

只有兩個值:True(真)和False(假)

Numbers(數字類型)

Python支持四種不同的數字類型:

int(有符號整型)

long(長整型[也可以代表八進制和十六進制])如:51924361L ,L表示長整型,也可以使用小寫l,最好使用大寫,為了避免和1混淆

float(浮點型)

complex(複數) 可以用 a + bj,或者 complex(a,b) 表示, 複數的實部 a 和虛部 b 都是浮點型。

String(字符串)

字符串或串(String)是由數字、字母、下劃線組成的一串字符,它是編程語言中表示文本的數據類型,字符串一般都放在兩個單引號或兩個雙引號中

範例一:定義一個字符串的變量

tmp='I Love You'

範例二:字符串截取操作,截取其中的某一個字符

tmp='I Love You'

res=tmp[0]#字符串名[索引]

print(res)

代碼的執行結果就是 I,為什麼第一個字母是0不是1,這是因為索引默認是從0開始,就是王八的屁股-龜腚(規定)

範例三:字符串截取操作,截取其中的某一段字符比如love

tmp='I Love You'

res=tmp[2:6] #語法:字符串名[開始索引:結束的索引]

print(res)

執行的結果如下:輸出love,首先說下空格也是算一個字符的,這裡順便解釋一下,為什麼是[2:6],不是[2:5],拿數學中的區間比喻的話就是[2,5),也就是左閉右開的,到5的話是不算5的,所以要到6.

List(列表)

List(列表) 是 Python 中使用最頻繁的數據類型。列表可以完成大多數集合類的數據結構實現。它支持字符,數字,字符串甚至可以包含列表(即嵌套)。列表用 [ ] 標識,是 python 最通用的複合數據類型。列表中值的切割也可以用到變量 [頭下標:尾下標] ,就可以截取相應的列表,從左到右索引默認 0 開始,從右到左索引默認 -1 開始,下標可以為空表示取到頭或尾。可以使用加號 來連接列表連接運算符,也可以使用,星號

* 是重複操作。如下實例:

# -*- coding: UTF-8 -*-

list = [ 'runoob', 786 , 2.23, 'john', 70.2 ]#創建一個列表

tinylist = [123, 'john']

print list # 輸出完整列表

print list[0] # 輸出列表的第一個元素

print list[1:3] # 輸出第二個至第三個元素

print list[2:] # 輸出從第三個開始至列表末尾的所有元素

print tinylist * 2 # 輸出列表兩次

print list + tinylist # 打印組合的列表

Tuple(元組)

元組是另一個數據類型,類似於List(列表)。元組用"()"標識。內部元素用逗號隔開。但是元組不能二次賦值,也就是說元組是不可更改的序列,而列表可以使用一些方法進行改變,如extend()方法、append()方法等等

tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )

tinytuple = (123, 'john')

print tuple # 輸出完整元組

print tuple[0] # 輸出元組的第一個元素

print tuple[1:3] # 輸出第二個至第三個的元素

print tuple[2:] # 輸出從第三個開始至列表末尾的所有元素

print tinytuple * 2 # 輸出元組兩次

print tuple + tinytuple # 打印組合的元組

Dictionary(字典)

字典(dictionary)是除列表以外python之中最靈活的內置數據結構類型。列表是有序的對象集合,字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。字典用"{ }"標識。字典由索引(key)和它對應的值value組成。

#!/usr/bin/python

# -*- coding: UTF-8 -*-

dict = {}

dict['one'] = "This is one"

dict[2] = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}

print dict['one'] # 輸出鍵為'one' 的值

print dict[2] # 輸出鍵為 2 的值

print tinydict # 輸出完整的字典

print tinydict.keys() # 輸出所有鍵

print tinydict.values() # 輸出所有值

補充一下,列表、元組和字典可以使用len()方法來獲取其內容的長度,在python中我們可以使用type()的方法來查看一個變量的數據類型,如type(1),那麼就會返回是整型

Python的條件判斷語句

基本格式if-else如下:

if 條件判斷:

執行語句

else:

執行語句

多重選擇判斷if-elif-elif-else

if 條件判斷:

執行語句

elif 條件判斷:

執行語句

elif 條件判斷:

執行語句

else:

執行語句

多重判斷語句中可以有個elif語句,在這裡順便提一下,Python編程中一定要注意縮進,縮進只能以一種方式使用,比如你要麼使用空格,要麼使用tab,不能混合用,混合用就會報錯,此外編程中所使用的標點符號一必須是英文狀態下的。

Python的循環語句(for循環和while循環)

Python for循環可以遍歷任何序列的項目,如一個列表或者一個字符串,語法如下

第三章:Python Selenium 自動化測試之Python基礎

python提供了一個range()函數,該函數可以生成一個整數序列,因此我們可以使用它來進行整數的循環

範例:計算1-10的和

# -*- coding: UTF-8 -*-

res=0

for i in range(11):

res+=i

print(res)

運行的結果是55

while循環(相比較for循環而言,for循環使用的概率比while更加頻繁一些)

while 判斷條件: 執行語句……

Python函數

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重複利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。

用戶自定義函數

定義一個函數

你可以定義一個由自己想要功能的函數,以下是簡單的規則:

1.函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號()

2.任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用於定義參數。

3.函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。

4.函數內容以冒號起始,並且縮進。

5.return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

調用函數

定義一個函數只給了函數一個名稱,指定了函數里包含的參數,和代碼塊結構。這個函數的基本結構完成以後,你可以通過另一個函數調用執行,也可以直接從Python提示符執行。

範例:定義一個函數並調用

第三章:Python Selenium 自動化測試之Python基礎

Python面向對象

Python從設計之初就已經是一門面向對象的語言,正因為如此,在Python中創建一個類和對象是很容易的。面向對象的一些基本特徵如下:

類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。

數據成員:類變量或者實例變量, 用於處理類及其實例對象的相關的數據。

方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。

實例變量:定義在方法中的變量,只作用於當前實例的類。

實例化:創建一個類的實例,類的具體對象。

方法:類中定義的函數。

對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。

在面向對象中,將世界上的所有的事物都看成是一個對象,比如一個人,一隻狗,一頭豬,而類就是對這些對象的抽象,比如說人類,貓科動物,他們擁有共同的屬性和行為,比如人都有鼻子都有臉,都能吃都能睡,類表現出的是一種共性,而對象表現的是一種個性,而對象的屬性在編程的世界中就是變量,對象的行為在面向對象的世界中就是方法。在面向對象的世界中一定是先有類,後有對象。此外提一下面向對象的三大特性:繼承、多態、封裝

python類的定義

使用 class 語句來創建一個新類,class 之後為類的名稱並以冒號結尾:

class ClassName:

'類的幫助信息' #類文檔字符串

class_suite #類體

範例:定義一個學生的類

# -*- coding: UTF-8 -*-

class Student:

'定義一個學生的類'

def __init__(self,name,sex):

'初始化方法'

self.name=name

self.sex=sex

def haveClass(self,name):

print(name+'在上課')

s=Student('name','male')#創建一個對象

s.haveClass(s.name)#類的的方法

代碼解釋:

  • __init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的對象時就會調用該方法
  • self 代表類的實例,代表當前對象的地址,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。
  • 您可以使用點號 . 來訪問對象的屬性。

Python模塊

Python 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和Python語句。模塊讓你能夠有邏輯地組織你的 Python 代碼段。把相關的代碼分配到一個模塊裡能讓你的代碼更好用,更易懂。模塊能定義函數,類和變量,模塊裡也能包含可執行的代碼。簡單的講模塊就是一個py文件。最大的好處是大大提高了代碼的可維護性。其次,編寫代碼不必從零開始。當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。使用模塊還可以避免函數名和變量名衝突。相同名字的函數和變量完全可以分別存在不同的模塊中,因此,我們自己在編寫模塊時,不必考慮名字會與其他模塊衝突。但是也要注意,儘量不要與內置函數名字衝突

模塊的引入

模塊定義好後,我們可以使用 import 語句來引入模塊,語法如下

import module1[, module2[,... moduleN]

Python 的 from 語句讓你從模塊中導入一個指定的部分到當前命名空間中。語法如下:

from modname import name1[, name2[, ... nameN]]

Python 的 from 語句,導入一個模塊的所有內容

from modname import *

當你導入一個模塊,Python 解析器對模塊位置的搜索順序是:

  • 1、當前目錄
  • 2、如果不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個目錄。
  • 3、如果都找不到,Python會察看默認路徑。UNIX下,默認路徑一般為/usr/local/lib/python/。

此外補充一點:一個模塊只會被導入一次,不管你執行了多少次import。這樣可以防止導入模塊被一遍又一遍地執行

Python異常

異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在Python無法正常處理程序時就會發生一個異常。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。

異常處理

基本語法如下

try:

有可能拋出異常的代碼

except 異常類型名稱:

處理代碼

當 try 代碼塊中一旦出現異常,這個代碼塊後續的代碼不會繼續執行,會直接進入到 except 異常處理代碼塊中。

範例:它打開一個文件,在該文件中的內容寫入內容,且並未發生異常

try:

fh = open("testfile.txt", "w")

fh.write("這是一個測試文件,用於測試異常!!")

except IOError:

print("Error: 沒有找到文件或讀取文件失敗")

else:

print("內容寫入文件成功")

fh.close()

捕捉系統異常信息

try :

有可能拋出異常的代碼

except BaseExcept as a:

print(a)

as:

範例:捕獲沒有定義變量的異常

第三章:Python Selenium 自動化測試之Python基礎

使用except而不帶任何異常類型

try:

正常的操作

except:

發生異常,執行這塊代碼

else:

如果沒有異常執行這塊代碼

try-finally 語句(無論是否發生異常都會執行finally下的語句)

try: 正常的操作except: 發生異常,執行這塊代碼finally: 無論是否發生異常都會執行這塊代碼

示例代碼如下:

第三章:Python Selenium 自動化測試之Python基礎

觸發異常

我們可以使用raise語句自己觸發異常,語法如下

raise [Exception [, args [, traceback]]]

語句中 Exception 是異常的類型(例如,NameError)參數標準異常中任一種,args 是自已提供的異常參數。最後一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。注意raise只能用於python標準異常類

第三章:Python Selenium 自動化測試之Python基礎

這一章的目的是為自動化做一個鋪墊,對python的知識有個大致的概念,由於自動化的教程重點是自動化,不是python,所以python中的內容就是簡單涉及,並且以菜鳥教程為參考,Python的學習還是系統的學習比較好,下一章我們正式的開始python selenium的學習即web界面元素的定位。


分享到:


相關文章: