python自動化測試應(yīng)用-第5篇(WEB測試)--Selenium環(huán)境篇

1.1概要

大家好扎唾!我是lamecho(辣么丑)盔性,上一篇我們搭建好python運(yùn)行selenium的環(huán)境后划址,接下來當(dāng)然是來看看怎么去使用它了。其實(shí)selenium在操作上和appium是很像的掖桦,第一步都是要找元素本昏,通過定位到元素后再去執(zhí)行動作。好枪汪,下面我們將方法穿插到實(shí)戰(zhàn)中來做演示涌穆。

1.2 selenium實(shí)戰(zhàn)百度頁面

在進(jìn)入實(shí)戰(zhàn)前,我們先拋開selenium去談?wù)?a target="_blank" rel="nofollow">web頁面雀久。首先我們查找頁面元素的方法是直接可以在瀏覽器中完成的宿稀,本文將以chrome瀏覽器為例,

上圖是瀏覽器的截圖赖捌,按F12可以打開如上圖的調(diào)試工具祝沸,在定位元素上通過紅框圈起來的工具可以很方便的定位元素在頁面源碼的位置。我這里要說的是巡蘸,如何做好web頁面的自動化測試奋隶,前提就是要學(xué)會分析我們的網(wǎng)頁源碼,了解我們元素在頁面源碼中的依存關(guān)系悦荒。為什么要這么說,因?yàn)楹芏鄷r候我們都會碰到這樣的問題嘹吨,明明頁面上有這個元素為什么我在腳本里去查找就是報錯呢搬味?

下面我先介紹幾個定位元素的方法,相對于appium文章中介紹的常用方法蟀拷,selenium中用到的會相對豐富一些碰纬。

browser.find_element_by_id()/browser.find_elements_by_id()

browser.find_element_by_tag_name()/browser.find_elements_by_tag_name()

browser.find_element_by_xpath()/browser.find_elements_by_xpath()

browser.find_element_by_link_text()/browser.find_elements_by_link_text()

大家不要感覺少,畢竟我在appium里只介紹了2個问芬,這里有4個了悦析。下面我們先來分析一下我們定位到的頁面“登錄“元素的源碼,我們可以得到哪些信息呢此衅?

登錄

1可以知道該元素的標(biāo)簽强戴,tagname是亭螟,并帶有鏈接屬性href

結(jié)論:(1)我們可以通過find_element_by_tag_name去定位;

(2)我們可以通過find_element_by_link_text()去定位骑歹;

2在標(biāo)簽里可以知道包含的屬性有href预烙,name,class等幾個屬性

結(jié)論:可以通過get_attribute()方法獲取這些屬性道媚,幫助我們進(jìn)一步定位

3可以看到這個元素的text值是“登錄“

結(jié)論:可以通過.text獲取元素的text值扁掸,幫助我們進(jìn)一步定位

我希望大家在剛開始學(xué)習(xí)selenium時,都要學(xué)會這樣去分析我們要找的頁面元素最域,因?yàn)橹挥惺煜ち嗽卦陧撁嬖创a的表現(xiàn)形式及它的上下文的依存關(guān)系谴分,我們在定位元素上就會有的放矢,不會出現(xiàn)查找不到的問題了镀脂。

廢了那么多話狸剃,我們終于要進(jìn)入實(shí)戰(zhàn)了。先說說我們將要執(zhí)行的動作狗热,打開百度首頁后钞馁,操作登錄,并在彈出的登錄框中輸入用戶名匿刮,密碼進(jìn)行登錄操作僧凰。

# -*-encoding:utf-8 -*-

from selenium import webdriver

browser=webdriver.Firefox()

browser.maximize_window()

browser.get("https://www.baidu.com/")

#1

browser.implicitly_wait(10)

browser.find_element_by_xpath('//div[@id="u1"]/a[7]').click()

#2

#browser.find_element_by_link_text(u'登錄').click()

#3

'''

els=browser.find_elements_by_tag_name('a')

for i in els:

if i.text==u'登錄':

i.click()

break

'''

browser.implicitly_wait(10)

browser.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__password').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__submit').click()

sleep(10)

browser.quit()

通過腳本對照我們之前對“登錄“元素的源碼分析,我在這里通過三種方式去實(shí)現(xiàn)了對”登錄“的點(diǎn)擊熟丸。#1是通過xpath查找训措,我們看看下面的截圖,了解xpath的使用方式光羞。

browser.find_element_by_xpath('//div[@id="u1"]/a[7]').click()

首先大家要記住xpath的寫法绩鸣,//div[@id="u1"]是通過一個父層級來定位,對照源碼可以清楚的看到登錄所在的標(biāo)簽的上一層級

browser.find_element_by_link_text(u'登錄').click()

再來看看這樣的寫法,由于我們的“登錄“是個鏈接倒信,所以就可以通過link_text去定位科贬。

els=browser.find_elements_by_tag_name('a')

for i in els:

if i.text==u'登錄':

i.click()

break

而第三種寫法,就稍微復(fù)雜了一點(diǎn)鳖悠。首先它是通過by tagname去找到所有tagname是a的元素集合榜掌,然后我們在循環(huán)里找到a標(biāo)簽里text值等于“登錄“的標(biāo)簽進(jìn)行點(diǎn)擊优妙。

接下來我們看看最后對彈出登錄框的操作

browser.implicitly_wait(10)

browser.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__password').send_keys('test')

browser.find_element_by_id('TANGRAM__PSP_8__submit').click()

可以看到3個元素都是通過id去查找,并在找第一個input時用到了智能等待語句唐责×鄹龋看到這里對selenium有過學(xué)習(xí)了解的同學(xué)可能會問了,這三個元素不是在彈出框里嗎鼠哥,怎么沒有先去將我們的browser切換到彈出框再去查找框里的元素呢熟菲?在這里我要提醒大家一下,之前培訓(xùn)很多人都會問到這個問題朴恳,具體問題要具體對待抄罕,就想文章開頭講的在找元素時要先分析元素的頁面源碼,百度頁面這個彈出框在源碼中它的依存關(guān)系始終都是在原頁面上于颖,意思就是我們不需要去切換現(xiàn)有的browser呆贿。另外在時間的等待上建議大家回頭看看我在《python自動化測試應(yīng)用-第3篇(APP測試)--Appium元素篇》談到的時間問題,在實(shí)際的工作中我們的自動化腳本中在界面切換時是不應(yīng)該出現(xiàn)sleep去做等待的森渐,而智能等待implicitly_wait()有時候也不能很好的處理做入。那么有沒有什么好的方法呢,當(dāng)然有了不過單純的使用selenium提供的方法就顯得捉襟見肘了同衣。在下一篇竟块,selenium使用進(jìn)階篇我將給大家闡述我的方法。

1.3元素篇—結(jié)束

怎么樣耐齐,看完這篇大家是不是對元素的查找有了初步的認(rèn)識呢浪秘,在接下來的一篇文章中,我將帶大家進(jìn)入selenium的進(jìn)階使用埠况,如何操作下拉列表耸携,如何在頁面中使用js腳本,如何在頁面上執(zhí)行鍵盤操作辕翰,以及對待frame應(yīng)該怎么找元素夺衍,瀏覽器頁面跳轉(zhuǎn)到新的tab后如何在新的tab中繼續(xù)我們的腳本等等干貨。

感謝大家耐心讀完金蜀,我是lamecho辣么丑刷后。

原創(chuàng)文章,轉(zhuǎn)載請注明出處渊抄。新浪微博搜索 “lamecho好棒” 歡迎大家來撩。

微博:https://weibo.com/u/6017986584

博客:http://blog.sina.com.cn/u/6017986584

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丧裁,一起剝皮案震驚了整個濱河市护桦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌煎娇,老刑警劉巖二庵,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贪染,死亡現(xiàn)場離奇詭異,居然都是意外死亡催享,警方通過查閱死者的電腦和手機(jī)杭隙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來因妙,“玉大人痰憎,你說我怎么就攤上這事∨屎” “怎么了铣耘?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長以故。 經(jīng)常有香客問我蜗细,道長,這世上最難降的妖魔是什么怒详? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任炉媒,我火速辦了婚禮,結(jié)果婚禮上昆烁,老公的妹妹穿的比我還像新娘吊骤。我一直安慰自己,他們只是感情好善玫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布水援。 她就那樣靜靜地躺著,像睡著了一般茅郎。 火紅的嫁衣襯著肌膚如雪蜗元。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天系冗,我揣著相機(jī)與錄音奕扣,去河邊找鬼。 笑死掌敬,一個胖子當(dāng)著我的面吹牛惯豆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奔害,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼楷兽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了华临?” 一聲冷哼從身側(cè)響起芯杀,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后揭厚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體却特,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年筛圆,在試婚紗的時候發(fā)現(xiàn)自己被綠了裂明。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡太援,死狀恐怖闽晦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粉寞,我是刑警寧澤尼荆,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站唧垦,受9級特大地震影響捅儒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜振亮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一巧还、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坊秸,春花似錦麸祷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至星瘾,卻和暖如春走孽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琳状。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工磕瓷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人念逞。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓困食,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翎承。 傳聞我的和親對象是個殘疾皇子硕盹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容