02

python css

%拼接的做用,html

name = 'zhangsan'
age = 25
print("name: %s,age %d" %(name,age))#%是拼接,%s是字符串,%d是整數---結果name: zhangsan,age 25
for i in xx -- for i not in xx
eg:

a = 3
b=4
if a>b:
print("max: %d" %a)
else:
print("max: %d" %b)----打印結果爲4

ctime是指當前時間java

引用同級目錄包的方法,如account.py有add函數--別的文件引入:from account import add  --print(add(2,3)) node

跨目錄: 若有一個abc目錄有一個count.py文件裏有個add方法,和不一樣目錄下有另一個py文件,---必定要在abc目錄內加一個_init_.py的文件python

import sysweb

sys.path.append('\abc') ---加入環境變量中---也能夠直接複製當前路徑在裏面就能夠引包了django

from abc import countwindows

print(count.add(3,5))  ---打印結果爲8設計模式

異常處理:數組

b='hello'
if b=='hello':
raise NameError('b not hello')

3課

定義類有三種寫法,其實都是同樣的:

class A:

class A():--第二種用的最多

class A(object):

類下的方法函數是 def add(self,a,b):---必定要寫self規範

class a():
def add(self,a,b):
return a+b
b = a()
c = b.add(5,6)
print(c) --打印結果爲11---也能夠直接用 print(a().add(5,6))
eg:
class a():
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)---self.a的做用是至關於成爲全局變量,下面add方法沒有a,b兩個參數,用self.a就能夠用了


def add(self):
return self.a + self.b
print(a().add(7,8))
類的繼承--在下面在定義一個函數
class b(a): --這樣就至關於b類繼承類a類的方法
def sub(self)
return self.a-self.b
if _name_=='_main_':---做用是別人調用的時候 if下的代碼都不會執行到,只有本身用的時候被執行到
a=b(5,6)
引包機制:
import count
r=count.a(8,9).add()---調用count.py文件下a()類的add()方法
print(r)
還一種不在同一目錄引包--from public.count import add --public是文件名,count是py文件,add是count.py的方法
還有一種:導入sys模塊--sys.path.append("/文件名") --print(sys.path)--查看是否成功--也能夠用絕對路徑,相對路徑就是文件名--python3不用加_init_.py文件
異常處理:
try:

open("abc.text","r")

except BaseException as e:---因此的異常均可以用
print(e)#---打印[Errno 2] No such file or directory: 'abc.text'---能夠加elese--也能夠加finally表示有沒有報錯都會被執行
4課:
8種定位方式:
find_element_by_xpath("//*[@id='kw']")--//表示某個標籤下--再就是id爲kw
也能夠爲
find_element_by_xpath("//input[@id='kw']")---也能夠爲input標籤下的id值--在同一條線上
或者input標籤的屬性值不惟一,能夠找上一級如:
find_element_by_xpath("//span[@id='kw']/input")---這樣再找input標籤的值--以此類推
還有一種方式:用and
find_element_by_xpath("//input[@id='kw',and @name='wd']")----都在同一條線上,能夠and多個
a標籤屬性爲空時
find_element_by_xpath("//input[@name='wd']/../a")---input和a標籤是同級相似兄弟,因此先找到你們的父標籤,在寫a標籤
find_element_by_css_selector("form#form>span.bg>input#kw")--->表示下一級層級關係(大括號)---也能夠在插件裏下載firemath插件
5課
1.控制瀏覽器大小
driver=webdriver.chrom()
driver.set_window_size(480,800)---大小
driver.maximize_window()---全屏
driver.back()---後退
driver.forward()---  前進
click()---任何均可以點擊
submit()---只能提交-表單
size 返回元素尺寸
text 獲取元素的文本,測試用例中的斷言
get_attribute(name)---得到屬性值
is_displayed()----設置該元素是否可見
文件格式:如讀取外部文件或網頁能夠不識別時候能夠
files=open("abc.txt",'r','utf-8') 也能夠用 files=file.encode('utf-8')---encode編碼,decode轉碼
鼠標事件:--封裝到ActionChains類裏面

好比有的元素放上去下面會出來更多元素時---鼠標懸停
el=driver.find_element_by_link_text("設置")
ActionChains(driver).move_to_element(ele).perform()---driver必定要傳,perform是執行
context_click()右擊
double_click()雙擊
drag_and_drop()拖動
move_to_element()鼠標懸停
eg:拖動
el=driver.find_element_by_link_text("xx")
el2=driver.find_element_by_link_text("xx2")
ActionChains(driver).drag_and_drop(el,el2).perform()----從el到el2
鍵盤操做---封裝到webdriver裏面,要先引包
from selenium from webdriver,common.keys import Keys---單獨封裝到keys一個類裏面
driver.find_element_by_link_text("設置").send_keys(keys.BACK_SPACE)--刪除一個置字,還有keys.SPACE是空格鍵,必定要加keys獲取驗證信息:title,url,text--能夠用來斷言和作驗證信息
顯示等待--針對某個元素進行等待--要引包--from selenium import webdriver.suuport.ui import WebDriverWait--
-還要條件,也要引包from selenium.webdriver.support
import expected_conditions as EC   和 from selenium.webdriver.common.by import BY 也要引這個包
隱式等待:--針對當前頁面中的全部元素等待---第二種好點
eg:--顯示等待
ele=WebDriverWait(driver,5,0.5)untill()EC.presence_of_element_located(BY.ID,'kw')----driver必定要傳,5秒爲這個總時間,在0.5秒以內檢查一次,
也能夠用is_displayed()---判斷是否顯示---能夠加for循環--for i in range(10)---循環10次
eg:隱式等待
from selenium import webdriver.suuport.ui import WebDriverWait
driver=webdriver.chrom()
driver.implicitly_wait(10)---隱式等待10,若是10以前提早找到就執行下一步,指10以內,這個等待10s是指下面3個操做,不是指一個單一的定位元素
driver.get(http://wwww.baidu.com)
input_=driver.find_element_by_id("kw")
input_.send_keys('hha')
6課
定位一組元素--
find_elements_by_tag_name('input')  ---就是element後面多了個s---tag_name主要用於一組元素定位,由於它主要是定位有幾個input標籤的
eg:
import os,time ----由於打開是本地文件因此要導入os模塊---對應path路徑--能夠直接driver.get(path)
inputs=find_elements_by_xpath('//input[type=checkbox]') ---獲取全部的input標籤---用xpath更簡單--css也能夠
inputs=find_elements_by_tag_name('input') 

for i in inputs:---循環點擊
if i.get_attribute('type')=='checkbox' ---只有是複選框的才點擊
i.click()
time.sleep(3)---每隔幾秒
選擇點擊第幾個
find_elements_by_xpath('//input[type=checkbox]').pop(0).click()---選擇點擊第一個,從0開始
find_elements_by_xpath('//input[type=checkbox]')[2].click()---也能夠用數組的方式去點擊
多表單切換:表單嵌套--html嵌套html
能夠直接用:driver.switch_to_frame("if")-----切換內置的html直接定位到裏面的id爲if----再定位元素便可
也能夠用xpath:
xp = find_element_by_xpath("//fram[@id='if']")
driver.switch_to_frame(xp)
driver.find_element_by_id('kw').send_keys('selenium')---這裏就能夠正常操做類
退出表單:
driver.switch_to_default_content()---退出表單最外層--x新寫法中間部分可寫成to.default
driver.switch_to.parent_content()返回上一級表單
多窗口切換
search_windows=driver.current_window_handle---先打開一個窗口,再能夠切換
all_handles = driver.window_handles---得到當前全部打開的窗口句柄
for handle in all_handles:
if handle!=search_windows:
driver.switch_to_window(handle)
警告框處理:---沒法經過元素定位
1,接收彈框:driver.switch_to_alert().accept()
2,處理方式有幾種:
text 返回alert/confirm/prompt中的文字信息
accept 點擊確認按鈕
dismiss 點擊取消按鈕,若是有的話
send_keys 輸入值,這個alert/confirm沒有對話框就不能用類,否則會報錯
文件上傳:
好比點擊瀏覽按鈕---會彈出windows窗口---能夠定位瀏覽的元素按鈕(name=file)
eg:
import os
driver= webdriver.chrom()
file path='file///'+os.path.abspath(upfile.html)---打開上傳功能頁面
driver.get(file_path)
driver.find_element_by_name("file").send_keys(要上傳的文件路徑)
還有一種AutoIt第三方工具,是window的gui自動化工具--要下載---能夠定位window窗口的元素,直接把小原點拉大想定位的地方就會出現class,或者其餘一些屬性值

在該工具中找到compile script to.exe(..這個工具打開---選擇exe,再選擇brows(瀏覽)找到剛剛編寫的au3的腳本--再點擊convert生成一下--再用python掉用exe文件--os.sys(exe文件地址)--調用exe文件上傳程序就完成了,不用加driver---可是不推薦,由於這個不受python控制

8課-模型

1,庫裏面是一些類和方法:sleep()os,sys能夠有參數和無參數--能夠幫你解決一件事情

框架-framework如django,unittest--是解決一類問題的,提供不少方法--好比解決web開發

工具:jemeter,是指獨立的界面,有本身的頁面,或者程序

數據驅動含義:由於數據的改變致使結果的改變--就是參數化

關鍵字驅動:就是至關與把功能封裝成函數,調用時至關因而函數的關鍵字,不一樣關鍵字,功能不同

9課:模塊化--把功能封裝一個函數。而後再調用

1,好比把登錄和退出功能定義成連個函數在aa.py裏面,而後再在別的py文件裏去調用登錄退出函數便可如:login(driver),logout(driver),定義函數和調用函數兩個py文件

都要裏面帶driver,否則會調用失敗,由於另外一個沒定義,都寫至關於建立一個driver接口

2,也能夠定義一個LOGIN()類,把登錄和退出函數放在這個類下面,類方法下的login函數等就要寫成login(self,driver):---必定要寫self

掉用的時候就是要寫成 LOGIN(driver).login()--類的時候要初始化--調用類,類也要帶括號

 

 數據驅動:--實現不一樣用戶登錄

讀字典的方式讀取用戶名和密碼

 

文件讀取用戶名和密碼--如tex文件存放用戶名和密碼
read()讀取整個文件
readline()讀取一行數據
readlines()讀取全部行數據

讀取csv文件--一組信息--csv文件必須先建立一個exe文件,再另存爲csv文件格式,直接把文件改爲csv格式是沒有效果的

讀取xml文件--主要處理數據,跟html不同,html是展現頁面

 

 

 

10課 selenium ide---瀏覽器安裝--瀏覽器安裝以後--能夠在瀏覽器工具上找selenium--能夠錄製腳本

selenium2.0=selenium1.0+webdriver

斷言是中止腳本的運行,

驗證是指出錯仍是執行下一步

11課:unittest單元測試框架是組織和執行測試用例的--提供豐富比較方法,日誌

eg:

import unittest

class TestCount(unittest.TestCase)  --定義這個類要繼承uinttest的方法

      def test_add(self): # 必定要以test開頭

     以後  self.assertEqual(add,6)-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            --斷言add方法的值是否是6--必定要加self由於assertEqual是繼承TestCase裏的方法

if _name_=="_main_":---執行測試類的測試方法

 unittest.main()---main是指執行tes_這類函數的

測試套件就是存放測試用例的一個容器

def setup(self)和def teardown(self)---都要加selfprint('hahh')測試套件用的方法:

if _name_=="_main_":
suit=unittest.TestSuit()---測試套件
suit.addTest(abc.TestCount("tast_add"))---引用測試套件的addTst方法--是abc的py文件的TestCount的類下面的test_add方法
runner=unittest.TextTestRunner()運行測試用例
runnner.run(suit)運行裏的run方法
斷言--in

 

有一種只用加載一行就能執行全部的測用例

test_dir='./testcase'  ----指定測試目錄:

run=discover=unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')---patter是指哪些文件須要執行--discover是按順序執行

runner(run)  ---執行

多個用例執行順序:1-9, A-Z,a-z,順序

若是想指定那個用例先執行就用測試套件-控制順序-但不可取

想要某個用例不執行在函數前加@unittest.skip('就是不想讓你執行')  --也是在dicover裏面用

有條件跳過該測試用例

13生成測試報告---用的unittest框架--有htmltestrunner--去下載,是一個py的文件要複製到pthon的lib目錄裏面--python要該py裏面的相應信息,否則不支持--
from HTMLTestRunner import HTMLTestRunner ---引包--這是下載的上面的文件名,和類方法

生成測試報告--以html的形式

測試報告中對於每一個測試用例的註解

 

每次按時間撮生成新的報告

 14,自動發郵件功能--1種以html的方式去發送

from smtplib import SMTP--要引包

 

2種,以附件的方式去發送--若是想多我的接收就receive=[zhangsan@163.com,lisi@163.com,wangwu@163.com]

步驟以下:

 

怎麼找到最新的報告--加時間

找最新報告的方法:

os.listdir(報告path)---會獲得該路徑下的全部報告

匿名函數就是沒有函數名---lambda a,b:a+b  ---a,b就是入參,a+b就是結果,若是key=lambda a,b:a+b ,則key就是這麼模塊的名字

15課,page object的設計模式--頁面對象--把元素分離出來,封裝成一個方法

16-selenium-grid--用於作分佈式(現以集成到seleniumserver中了),本地的腳本能夠去不一樣的操做系統--下載jar包,

java環境下載:http://www.java.com/zc-CN/download/manual.jsp---看是否安裝成功,在終端輸入java,和javac命令

再下載seleniumserver--瀏覽器上下載

運行seleniumserver-方法-打開終端輸入 java -jar selenium-server-standlone-2.46.0.jar

指定主節點:java -jar selenium-server-standlone-2.46.0.jar -role hub

指定分支節點:java -jar selenium-server-standlone-2.46.0.jar -role node -port 5555  ----主節點端口號被佔用,能夠重新取個新的分支節點

 eg:

啓動不一樣瀏覽器

啓動遠程的節點--遠程的分支節點--裝虛擬機-先ipconfig虛擬機的ip地址,在本機上ping 虛擬機的ip地址看是否通的,反過來經過本機ipconfig查本機ip。而後在虛擬機上ping--而後以下:

 

分佈式:能夠在不一樣平臺上執行

多線程:同時執行多個用例

18課--項目總和

有時候懸停的位置元素不太穩定,能夠看下href通常是當前頁面地址加上href的地址拼接就轉到該頁面裏--根據attribute

 19i課:--多線程技術-併發

進程:好比啓動了一個qq就是啓動了一個進程--耗資源點

線程:線程是進程裏的子進程--更穩定

 

 

 

 

 

 引包:from thresding import Thread--多線程--也不是同一時間,只是時間能夠忽略,很短

import multiprocessing   ---多進程模塊

守護進程,join()--是指把join上面的進程執行完成才執行join下面的

eg:--線程

 

 

 

 升級版:多線程

 

 

 

 20--bbd行爲驅動開發--經過用戶行爲開發

add--根據驗收來開發---python的有lettuce框架-生菜

安裝--pip install lettuce

相關文章
相關標籤/搜索