##python + selenium UI自動化測試(適合小白入門)

寫在前面

應公司要求讓我做個內部分享爹脾,所以我就寫了篇文章,順便也注冊一個簡書放上去了,這篇博客適合想學selenium的同學,這是一個入門教程,由于網上大量window系統(tǒng)的教程囚巴,mac的較少、所以我就用Mac安裝了一遍相關的工具友扰,做了個教程彤叉,此文較長。村怪。姆坚。

目錄:

  • Python3.x環(huán)境安裝(mac)

  • PyCharm編譯器破解版安裝

  • Selenium的環(huán)境搭建(mac)

  • 安裝瀏覽器驅動chromedriver(mac)

  • python、selenium/webdriver常見基本語法

  • 使用python3.X編寫測試腳本

一实愚、python3.x環(huán)境安裝

在Mac上安裝Python

如果你正在使用Mac,系統(tǒng)是OS X >= 10.9,那么系統(tǒng)自帶的Python版本是2.7腊敲。要安裝最新的Python 3.7烹吵,有兩個方法:

方法一:從Python官網下載Python 3.7的安裝程序Python 3.7锈死,雙擊運行并安裝(傻瓜式操作一直下一步即可);

方法二:如果安裝了Homebrew,直接通過命令brew install python3安裝即可耘斩。

Python解釋器

當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件侠讯。要運行代碼淫痰,就需要Python解釋器去執(zhí)行.py文件。

Mac電腦推薦:PyCharm

二循衰、安裝PyCharm破解版

第一步:官方下載PyCharm專業(yè)版(如果你已經下載有铲敛,建議你卸載刪除后(一定要把數(shù)據刪除干凈)重新下載,避免出現(xiàn)版本問題)

第二步:將DMG中的 PyCharm.app 拖動至 “應用程序”文件夾

拖動至 “應用程序”文件夾

第三步:下載JetbrainsCrack破解補丁包

第四步:將下載好的破解補丁包復制到 /Applications/PyCharm.app/Contents/bin/ 目錄中(找到應用程序/Pycharm 右鍵顯示包內容会钝,就可以看到Contents文件夾)如圖:

[圖片上傳失敗...(image-b99f25-1608864322297)]

第五步:用編輯器打開 /Applications/PyCharm.app/Contents/bin/pycharm.vmoptions 文件伐蒋,添加 -javaagent:/Applications/PyCharm.app/Contents/bin/JetbrainsCrack-release-enc.jar在最后一行。如圖:

[圖片上傳失敗...(image-429573-1608864322297)]

注意:路徑修改成你的pycharm安裝路徑迁酸,然后保存先鱼。

第六步:啟動PyCharm,選擇激活碼激活,并在激活碼欄目輸入任意內容,然后點擊ok即可奸鬓。

大功告成:顯示到期日期為2100年

PyCharm破解成功

網上有不少用pip方式安裝selenium的焙畔,其實selenium本質就是第三方庫,我們可以采用pycharm自帶方式來安裝

三串远、使用PyCharm安裝selenium庫文件

第一步:在PyCharm啟動頁面進入設置Preferences

[圖片上傳失敗...(image-6c6ae1-1608864322297)]

第二步:進入Project Interpreter選項宏多,點擊“+”號

添加

第三步:修改pip源,切換到國內https://pypi.tuna.tsinghua.edu.cn/simple/

切換pip源到國內

[圖片上傳失敗...(image-9a5bba-1608864322297)]

第四步:安裝selenium


安裝selenium

四抑淫、安裝瀏覽器驅動chromedriver(mac)

每個瀏覽器都有自己的驅動绷落,比如谷歌的chromedriver、火狐的geckodriver始苇、IE的IEDriverServer,
未安裝chrome驅動時砌烁,使用webdriver調chrome,并使用get方法傳url參數(shù)時會報錯催式;

    TypeError: get() missing 1 required positional argument: 'url'

因此需要安裝相應的瀏覽器驅動函喉。

以下我們以谷歌的chromedriver為例:

1、查看chrome版本:輸入chrome://settings/help

  • 注意:<mark> chromedriver的版本一定要與chrome 瀏覽器的版本一致,否則在運行的時候會報錯</mark>


    查看chrome版本

2荣月、下載chromedriver

  • 注意:<mark>需要翻墻才能下載</mark>
    [圖片上傳失敗...(image-ba5275-1608864322297)]

3管呵、拷貝到:usr/local/bin 。并不是usr/bin,因為沒有系統(tǒng)管理員權限哺窄,拷貝到usr/bin下捐下,很難成功账锹,我嘗試直接粘貼,用命令拷貝等坷襟,都不行奸柬。最后發(fā)現(xiàn)拷貝到:usr/local/bin,就可以用了婴程。簡單可行廓奕。


拷貝chromedriver到bin文件夾

注意:<mark>常見報錯原因:</mark>

  • 瀏覽器和chromedriver版本不一致
  • 防火墻導致無法訪問鉻瀏覽器,關閉防火墻

五档叔、python桌粉、selenimu、webdriver基本語法

1衙四、python基本語法:

推薦學習廖雪峰的python教程

2铃肯、selenium/webdriver常用知識點:

  • 瀏覽器操作
        
1、瀏覽器最大化

    driver.maximize_window()

2届搁、設置瀏覽器寬和高

    driver.set_window_size(400,800)

3缘薛、控制瀏覽器前進、后退

    driver.forward()

    driver.back()

4卡睦、刷新頁面

    driver.refresh()
    
5宴胧、輸入網址

    driver.get("http://wenku.baidu.com")
    
6、獲得當前頁面title表锻,判斷頁面跳轉是否符合預期
    
    driver.title
    
7恕齐、獲得當前URL,一般用來測試重定向

    driver.current_url
            
  • Selenium 八種元素定位方法
        
1瞬逊、id定位

    driver.find_element_by_id()

2显歧、name定位

    driver.find_element_by_name()


3、class定位

    driver.find_element_by_class_name()
    
4确镊、tag定位

    driver.find_element_by_tag_name()
    
5士骤、link定位

    driver.find_element_by_link_text()

6、partial_link定位

    driver.find_element_by_partial_link_text()
    
7蕾域、xpath定位

    driver.find_element_by_xpath()
    
8拷肌、CSS定位

    driver.find_element_by_css_selector()

            
  • 操作測試對象
        
1、清除內容旨巷,如默認用戶名和密碼

    driver.find_element_by_css_selector('xxxxx').clear()

2巨缘、模擬鼠標點擊操作

    driver.find_element_by_css_selector('xxxxx').click()

3、向輸入框輸入
    
    driver.find_element_by_css_selector('xxxxx').send_keys()

4采呐、提交表單

    driver.find_element_by_css_selector('xxxxx').submit()
            
  • WebElement接口常用方法
        
1若锁、返回元素尺寸
    
    driver.find_element_by_css_selector('xxxxx').size

2、獲取元素文本信息

    driver.find_element_by_css_selector('xxxxx').text

3斧吐、獲取元素某個屬性值

    driver.find_element_by_css_selector('xxxxx').get_attribute('type')

4又固、該元素用戶是否可見

    driver.find_element_by_css_selector('xxxxx').is_displayde()
            
  • 鼠標事件
        
ActionChains類操作鼠標事件ActionChains的使用:

首先引入:
from selenium.webdriver.common.actionchains import ActionChains

ActionChains的執(zhí)行原理調用ActionChains方法的時候,用戶行為不會立刻執(zhí)行,
而是將所有操作放在一個隊列中,當執(zhí)行perform()方法時,按照放入隊列的順序先進先出執(zhí)行ActionChains方法的書寫格式

perform():執(zhí)行

1仲器、鼠標右擊
    
    driver.find_element_by_css_selector('xxxxx').context_click()

2、鼠標雙擊

    driver.find_element_by_css_selector('xxxxx').double_click() 
    
3仰冠、鼠標點擊
    
    driver.find_element_by_css_selector('xxxxx').click()
    
4娄周、按住鼠標左鍵(不抬起)
    
    driver.find_element_by_css_selector('xxxxx').click_and_hold()
    
5、鼠標移動到某個元素

    ActionChains(driver).move_to_element(目標元素).perform()
    
6沪停、鼠標移動到某個坐標

    ActionChains(driver).move_by_offset(xoffset,yoffset).perform()
    
7、將元素從起點source移動到終點target

    ActionChains(driver). drag_and_drop(source, target).perform()
    
8裳涛、按照坐標移動

    ActionChains(driver). drag_and_drop_by_offset(source, xoffset, yoffset).perform()
        
  • 鍵盤事件
Keys類操作鍵盤事件

Keys類的使用

首先引入:
from selenium.webdriver.common.keys import Keys

1木张、輸入框輸入內容

    driver.find_element_by_class_name('j-phone').send_keys('18519533777')
        
2、全選

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.CONTROL,'a')

3端三、復制

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.CONTROL,'c')

4舷礼、粘貼

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.CONTROL,'v')

5、剪切

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.CONTROL,'x')

6郊闯、回車鍵

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.ENTER)

7妻献、刪除鍵

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.BACK_SPACE)

8、空格鍵

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.SPACE)

9团赁、制表鍵

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.TAB)

10育拨、回退鍵

    driver.find_element_by_css_selector('xxxxx').send_keys(Keys.ESCAPE)
            
  • selenium中的三種等待方式
        
1、顯示等待(導入 WebDriverWait 包)

    顯示等待欢摄,同樣也是 webdirver 提供的方法熬丧。在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在怀挠,如果超過設置時間檢測不到則拋出異常析蝴。默認檢測頻率為0.5s,默認拋出異常為:NoSuchElementException
    
    WebDriverWait(driver,10).until(EC.presence_of_element_located(locator))
    driver.find_element_by_id("kw").send_keys('abc')

2绿淋、隱式等待

    隱式等待闷畸,也叫智能等待,是 webdirver 提供的一個超時等待吞滞。隱的等待一個元素被發(fā)現(xiàn)佑菩,或一個命令完成。如果超出了設置時間的則拋出異常冯吓。
    
    driver.implicitly(秒數(shù))

3倘待、強制等待(導入 time 包)

    強制等待,設置固定休眠時間组贺。 python 的 time 包提供了休眠方法 sleep() 凸舵, 導入 time 包后就可以使用 sleep(),進行腳本的執(zhí)行過程進行休眠失尖。
    
    time.sleep(秒數(shù))
            
  • 定位frame中的對象
        
1啊奄、切換到iframe中

    driver.switch_to.frame(id/name/xpath)

2渐苏、從未嵌套的iframe中返回(切到frame中之后,我們便不能繼續(xù)操作主文檔的元素菇夸,這時如果想操作主文檔內容琼富,則需切回主文檔。)

    driver.switch_to.default_content()

3庄新、從嵌套的iframe中返回(parent_frame()這個相當于后退的方法鞠眉,我們可以隨意切換不同的frame)

    driver.switch_to.parent_frame()
            
  • 多窗口處理
    • 要想在多個窗口之間切換,首先要獲得每一個窗口的唯一標識符號(句柄)择诈。通過獲得的句柄來區(qū)別分不同的窗口械蹋,從而對不同窗口上的元素進行操作
        
1、獲得當前窗口的句柄

    driver.current_window_handle

2羞芍、獲得所有窗口的句柄

    driver.window_handles

3哗戈、切換回指定句柄的窗口

    driver.switch_to_handle("句柄")

4、關閉當前窗口

    driver.close()

5荷科、關閉所有窗口

    driver.quit()
            
  • 下拉菜單處理

導入Select類:from selenium.webdriver.support.select import Select

使用方法:Select(driver.find_element_by_name("xxx")).select_by_index()
        
1唯咬、根據index屬性定位選項,index從0開始

    Select(driver.find_element_by_css_selector('xxxxx').select_by_index(index))

2畏浆、根據value屬性定位

    Select(driver.find_element_by_css_selector('xxxxx').select_by_value(value)

3胆胰、根據選項文本值來定位

    Select(driver.find_element_by_css_selector('xxxxx').select_by_visible_text(text))

4、選擇第一個選項

    Select(driver.find_element_by_css_selector('xxxxx').first_selected_option())
    
  • 調用js代碼

1全度、調用js代碼

    driver.execute_script()
    
舉個例子:

    js = 'var a = 100; var b = 200; var c = a + b; alert(c)'

    driver.execute_script(js)#會有彈框顯示300
            
  • 處理cookie
        
1煮剧、獲得所有cookie

    .driver.get_cookies()

2、獲得name屬性的cookie

    .driver.get_cookie(name)

3将鸵、添加cookie(cookie格式為字典勉盅,)

    .driver.add_cookie(cookie_dic)

4、刪除特定cookie

    .driver.delete_cookie(name)

5顶掉、刪除所有cookie

    .driver.delete_all_cookies()
            

六草娜、使用python3.X編寫測試腳本

網易云音樂:

from selenium import webdriver
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
# 設置為最大窗口
# driver.maximize_window()
driver.set_window_size(1400, 880)
# 設置隱式等待
driver.implicitly_wait(10)
# 訪問網易云音樂
driver.get('https://music.163.com')
driver.find_element_by_class_name('m-tophead').click()
driver.find_element_by_class_name('u-btn2-2').click()

# 輸入登錄手機號碼
driver.find_element_by_class_name('j-phone').send_keys('185xxxxxxxx')

# 輸入登錄密碼
driver.find_element_by_class_name('j-pwd').send_keys('oooooooo')
driver.find_element_by_class_name('j-primary').click()

# 搜索"講真的"歌曲
driver.find_element_by_id('srch').send_keys('講真的')
driver.find_element_by_id('srch').send_keys(Keys.ENTER)
driver.switch_to.frame('contentFrame')

# 點擊播放
driver.find_element_by_css_selector('.srchsongst>div:nth-child(1) .ply').click()
time.sleep(5)
driver.switch_to.parent_frame()
# 暫停音樂播放
ActionChains(driver).move_to_element(driver.find_element_by_css_selector('.m-playbar')).perform()
driver.find_element_by_css_selector('.ply').click()

# 發(fā)現(xiàn)音樂
driver.find_element_by_css_selector('.m-nav .fst').click()

# 點擊排行榜
driver.find_element_by_css_selector('.wrap .nav li:nth-child(2)').click()

driver.switch_to.frame('contentFrame')

div=driver.find_element_by_id('song-list-pre-cache')
tbody=div.find_element_by_tag_name('tbody')
trlist=tbody.find_elements_by_tag_name('tr')
driver.implicitly_wait(0)

for tr in trlist:
    sftags = tr.find_elements_by_class_name('s-fc9')
    if sftags:
        # 歌曲名和演唱者名
        songName=tr.find_element_by_css_selector('td .txt b').get_attribute('title')
        authorName = tr.find_element_by_css_selector('td .text').get_attribute('title')

        print('{:10s}:{}'.format(songName, authorName))

driver.implicitly_wait(10)

input('....')
driver.quit()

嗯~就這樣吧,如對文章有問題的小伙伴可以留言給我痒筒。下一篇出一個appium的教程宰闰。(未完待續(xù))

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市簿透,隨后出現(xiàn)的幾起案子移袍,更是在濱河造成了極大的恐慌,老刑警劉巖老充,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葡盗,死亡現(xiàn)場離奇詭異,居然都是意外死亡啡浊,警方通過查閱死者的電腦和手機觅够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門胶背,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喘先,你說我怎么就攤上這事钳吟。” “怎么了窘拯?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵红且,是天一觀的道長。 經常有香客問我涤姊,道長直焙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任砂轻,我火速辦了婚禮,結果婚禮上斤吐,老公的妹妹穿的比我還像新娘搔涝。我一直安慰自己,他們只是感情好和措,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布庄呈。 她就那樣靜靜地躺著,像睡著了一般派阱。 火紅的嫁衣襯著肌膚如雪诬留。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天贫母,我揣著相機與錄音文兑,去河邊找鬼。 笑死腺劣,一個胖子當著我的面吹牛绿贞,可吹牛的內容都是我干的。 我是一名探鬼主播橘原,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼籍铁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趾断?” 一聲冷哼從身側響起拒名,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芋酌,沒想到半個月后增显,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡隔嫡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年甸怕,在試婚紗的時候發(fā)現(xiàn)自己被綠了甘穿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡梢杭,死狀恐怖温兼,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情武契,我是刑警寧澤募判,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站咒唆,受9級特大地震影響届垫,放射性物質發(fā)生泄漏。R本人自食惡果不足惜全释,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一装处、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浸船,春花似錦妄迁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至封字,卻和暖如春黔州,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阔籽。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工流妻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人笆制。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓合冀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親项贺。 傳聞我的和親對象是個殘疾皇子君躺,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容