基于python3的selenium3的web自動化——小白進階之路(一)
1.檢查是否安裝python:cmd—>python? ??

2.檢查是否安裝selenium:cmd—>pip list

3.安裝瀏覽器驅(qū)動,注意瀏覽器的版本和驅(qū)動的版本需對應,百度即可
這里以Chrome為例
Chrome.webdriver 下載地址:http://npm.taobao.org/mirrors/chromedriver/2.41/
下載好放入python的安裝目錄下,或E:\python\Scripts文件夾中,并配置環(huán)境變量
詳情見上篇
4.導包:
from selenium import webdriver? ? ??
dr= webdriver.Chrome()??
dr.get("https://www.baidu.com/")
dr.quit()

selenium工具模擬用戶行為,web的ui層的自動化測試工具
打開瀏覽器,按f12,元素定位

5.HTML標簽:
<html>聲明html網(wǎng)頁
<a>代表的是一個鏈接??
<title>窗口標題
<form>表單 一般存在于登錄頁面
<div>沒名字 是一個塊標簽 一個容器標簽,里面可包含不同的標簽?
<span>沒名字 是一個文本標簽 ,一個文本容器標簽,里面一把放文本不同的標簽
<p>聲明的是一個段落
<input>是一個文本框
<img>代表圖像
<iframe>html 頁面中的一個網(wǎng)頁嵌套另一個網(wǎng)頁
HTML標簽的層級關(guān)系
爺爺類標簽<---- 父類標簽 <---- 子類標簽
HTML頁面中什么是元素?
在HTML頁面中,開始標簽和結(jié)束標簽之間的所有代碼,都叫元素,是一個集合的概念。
元素有什么組成呢?元素有屬性和屬性值
6.元素定位
6.1元素定位方法
find_element_by_id('id屬性值')?? ? --通過id定位
find_element_by_name('name屬性值')? ? --通過name定位
find_element_by_class_name('class的屬性值')? ? --通過class_name定位
find_element_by_link_text(u'文本描述')? ? --通過class屬性定位
find_element_by_xpath(‘xpath語法’)? ? --通過xpath語法定位
find_element_by_css_selector('css語法')? ? ?--通過css語法定位
還有通過tag_name和partial_link_text定位? 使用少,了解即可
定位報錯

檢查元素的屬性值是否唯一
模擬用戶點擊 click()
模擬用戶輸入信息send_keys()
6.2元素定位實例

重點1:定位元素技巧——xpath定位
xpath優(yōu)缺點
優(yōu)點:定位語法豐富(比如可以通過爺爺類,父類標簽定位),功能強大
缺點:定位速度相對css定位速度慢一些,抗變性弱(當元素的路徑在html頁面中發(fā)生改變時需要調(diào)整xpath定位的路徑)
xpath是通過元素的路徑查找元素,一級級的查找從html最外層一直查找到目標元素的所在位置
#通過xpath的絕對路徑定位
#dr.find_element_by_xpath('/html/body/div[2]/div/section[2]/div/form/fieldset/div[2]/input')
#通過xpath的屬性定位
#dr.find_element_by_xpath("http://input[@type='text']").send_keys("selenum自動化")
#dr.find_element_by_xpath("http://*[@type='text']").send_keys("selenum自動化")? ?---1.*表示任意標簽位置,但是type的屬性值必須唯一2.“//”表示先對路徑
xpath定位中用來表示層級關(guān)系的符號:“/”

class 屬性值帶空格的處理辦法:
如果直接用class屬性對應的廍屬性值,一般會報錯。
如果報錯,選取class屬性值中的部分屬性去嘗試,嘗試之前需要驗證該部分屬性值的唯一性
如果唯一,可能能用!也可能不能用!如果不能用,找他爺爺類的標簽和層級去定位
#通過邏輯運算符去定位 and
dr.find_element_by_xpath("http://input[@id='kw' and @autocomplete='off']").send_keys('123')
6.3驗證屬性唯一值得方法:
1.將你的鼠標放到html頁面中,隨意的一個位置
2.按快捷鍵:ctrl+f鍵,此時下面會出現(xiàn)一個文本框
3.在文本框中輸入我們要驗證的屬性值
4.驗證的目的是保證元素的屬性是唯一的
5.如果頁面中發(fā)現(xiàn)屬性值的個數(shù)不是只有一個,那就說明我們不可以使用這個屬性值去定位
6.4
重點2:定位元素技巧——css定位
css是層疊樣式表,用于美化web頁面的一種技術(shù),我們主要使用css中的選擇器作為我們元素定位的一種策略
css定位的優(yōu)缺點
優(yōu)點:1.語法簡潔? 2.定位速度快 3.抗變性強
缺點:不支持多個索引
css的層級關(guān)系表示方法:>
css簡寫說明:
id? ? ? ? ? ————>"#"
class? ? ?————>"."
1.css定位 id? ? ?class (百度文本框)
dr.find_element_by_css_selector('#kw').send_keys('NBA')
dr.find_element_by_css_selector('.s_ipt').send_keys('selenium')
2.css定位? 屬性定位
dr.find_element_by_css_selector("#search-button").click()
dr.find_element_by_css_selector('input[name="wd"]').send_keys('NBA')

3.通過標簽名定位
dr.find_element_by_css_selector("input").send_keys("selenium自動化")
4.通過層級的父子關(guān)系定位
dr.find_element_by_css_selector("div > input").send_keys("selenium自動化")
5.通過層級與屬性組合定位
dr.find_element_by_css_selector("div > input.placeholder#input").send_keys("selenium自動化")
dr.find_element_by_css_selector("div.skin-search-input.hover > input.placeholder#input").send_keys("selenium自動化")
6.css定位 ?爺爺類標簽 層級和屬性結(jié)合 針對于id class
dr.find_element_by_css_selector("form#form>span>input").send_keys('NBA')

總結(jié):
1.元素定位時,如果有id,name,直接使用id,name定位,沒有id,name屬性的元素優(yōu)先考慮css定位
2.在自動化測試項目,定位優(yōu)先使用css定位,除非在css定位無法解決定位問時,這時候可以考慮xpath的路徑定位
因為在自動化測試腳本元素定位使用xpath定位過多,當元素的位置或者路徑發(fā)生改變時,使用xpath定位的腳本需要大批量的改動,這樣的結(jié)果是勞民傷財?shù)?,所以要避免?/p>