游覽器的相關(guān)操作
# -*- coding: utf-8 -*-
chromedriver = "/Applications/Google Chrome.app/Contents/MacOS/chromedriver"
from selenium import webdriver
brower.get('https://www.baidu.com/')
brower.maximize_window()
brower.find_element_by_id('kw').send_keys('selenium')
brower.find_element_by_id('su').click()
1焰坪、游覽器最大化
brower.maximize_window()
2凉驻、設(shè)置游覽器寬高
brower.set_window_size(200, 0, 1340, 1000)
3酝枢、游覽器的前進(jìn)渡冻、后退(webdriver提供了back()和forward()方法)
對(duì)象的處理
一個(gè)對(duì)象就像是一個(gè)人砾赔,他會(huì)有各種的特征(屬性),如比我們可以通過(guò)一個(gè)人的身份證號(hào)么翰、姓名或 者他的住址找到這個(gè)人浩嫌。那么一個(gè)元素也有類(lèi)似的屬性追迟,我們可以通過(guò)這種唯一區(qū)別于其它元素的屬性來(lái) 定位這個(gè)元素。當(dāng)然廓块,除了要操作元素時(shí)需要定位元素外,有時(shí)候我們只是為了獲得元素的屬性(class 屬 性契沫,name 屬性)带猴、text 或數(shù)量也需要定位元素。
* id
* name
* class name
* tag name
* link text
* partial link text
* xpath
* css selector
其對(duì)應(yīng)的方法是
* find_element_by_id() 根據(jù)id進(jìn)行定位
* find_element_by_name()根據(jù)元素中name 進(jìn)行定位
* find_element_by_class_name() 根據(jù) class定位進(jìn)行查找
* find_element_by_tag_name() 通過(guò) tag 標(biāo)簽名對(duì)對(duì)元素進(jìn)行定位 這種定位很不靠譜
* find_element_by_link_text() 拿到文字鏈接的 通過(guò)文字
* find_element_by_partial_link_text()
* find_element_by_xpath() find_element_by_css_selector()
XPath 是一種在 XML 文檔中定位元素的語(yǔ)言懈万。因?yàn)?HTML 可以看做 XML 的一種實(shí)現(xiàn)拴清,所以 selenium 用
戶可是使用這種強(qiáng)大語(yǔ)言在 web 應(yīng)用中定位元素靶病。
XPath 擴(kuò)展了上面 id 和 name 定位方式,提供了很多種可能性口予,比如定位頁(yè)面上的第三個(gè)多選框嫡秕。
<html class="w3c">
<body>
<div class="page-wrap">
<div id="hd" name="q">
<form target="_self" action="http://www.so.com/s"> <span id="input-container">
<input id="input" type="text" x-webkit-speech="" autocomplete="off" suggestwidth="501px" >
find_element_by_xpath("/html/body/div[2]/form/span/input")
相對(duì)路徑定位:
find_element_by_xpath("http://input[@id=’input’]") #通過(guò)自身的id屬性定位 find_element_by_xpath("http://span[@id=’input-container’]/input") #通過(guò)上一級(jí)目錄的 id 屬性定位 find_element_by_xpath("http://div[@id=’hd’]/form/span/input") #通過(guò)上三級(jí)目錄的 id 屬性定位 find_element_by_xpath("http://div[@name=’q’]/form/span/input")#通過(guò)上三級(jí)目錄的 name 屬性定位
操作測(cè)試對(duì)象
webdriver 中比較常用的操作元素的方法有下面幾個(gè):
1 clear 清除元素的內(nèi)容,如果可以的話
2 send_keys 在元素上模擬按鍵輸入
3 click 單擊元素
4 submit 提交表單
WebElement接口常用方法
size 返回尺寸
text 返回元素名稱
get_attribute(name) 獲取屬性值
is_displayed()
鼠標(biāo)鍵盤(pán)事件
ActionChains鼠標(biāo)操作用到的方法
在進(jìn)行操作之前苹威,應(yīng)該導(dǎo)入from selenium.webdriver.common.action_chains import ActionChains
名字 | 對(duì)應(yīng)的事件 |
---|---|
context_click( ) | 右擊 |
double_click( ) | 雙擊 |
drag_and_drop( ) | 拖動(dòng) |
move_to_element( ) | 鼠標(biāo)懸停在一個(gè)元素上 |
click_and_hold( ) | 按下鼠標(biāo)左鍵在一個(gè)元素上 |
鍵盤(pán)方法
我們?cè)趯?shí)際的測(cè)試工作中昆咽,有時(shí)候我們?cè)跍y(cè)試時(shí)需要使用 tab 鍵將焦點(diǎn)轉(zhuǎn)移到下一個(gè)元素,用于驗(yàn) 證元素的排序是否正確牙甫。webdriver 的 Keys()類(lèi)提供鍵盤(pán)上所有按鍵的操作掷酗,甚至可以模擬一些組合建的 操作,如 Ctrl+A ,Ctrl+C/Ctrl+V 等窟哺。在某些更復(fù)雜的情況下泻轰,還會(huì)出現(xiàn)使用 send_keys 來(lái)模擬上下鍵 來(lái)操作下拉列表的情況。
#coding=utf-8
from selenium import webdriver
#引入 Keys 類(lèi)包
from selenium.webdriver.common.keys import Keys
import time
chromedriver = "/Applications/Google Chrome.app/Contents/MacOS/chromedriver"
driver = webdriver.Chrome(chromedriver)
driver.get("http://www.baidu.com")
#輸入框輸入內(nèi)容
driver.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)
#刪除多輸入的一個(gè) m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(3)
#輸入空格鍵+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys(u"教程")
time.sleep(3)
#ctrl+a 全選輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(3)
#ctrl+x 剪切輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
time.sleep(3)
#輸入框重新輸入內(nèi)容且轨,搜索
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
time.sleep(3)
#通過(guò)回車(chē)鍵盤(pán)來(lái)代替點(diǎn)擊操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
time.sleep(3)
driver.quit()
名字 | 鍵盤(pán)對(duì)應(yīng)的事件 |
---|---|
send_keys(Keys.BACK_SPACE) | 刪除鍵(BackSpace) |
send_keys(Keys.SPACE) | 空格鍵(Space) |
send_keys(Keys.TAB) | 制表鍵(Tab) |
send_keys(Keys.ESCAPE) | 回退鍵(Esc) |
send_keys(Keys.ENTER) | 回車(chē)鍵(Enter) |
send_keys(Keys.CONTROL,'a') | 全選(Ctrl+A) |
send_keys(Keys.CONTROL,'c') | 復(fù)制(Ctrl+C) |
send_keys(Keys.CONTROL,'x') | 剪切(Ctrl+X) |
send_keys(Keys.CONTROL,'v') | 粘貼(Ctrl+V) |