(1) 控制瀏覽器
①控制瀏覽器窗口大小set_window_size(寬,高)
打開瀏覽器全屏maximize_window()
②控制瀏覽器后退back()、前進forward()
③模擬瀏覽器刷新refresh()
(2) 簡單元素操作
①清除文本clear()
②模擬按鍵輸入send_keys(*value)
③單擊元素click()
④提交表單submit()
⑤返回元素的尺寸size
⑥獲取元素的文本text
⑦獲得屬性值get_attribute(“name”)
⑧設置該元素是否用戶可見is_displayed()/true or false/
(3) 鼠標事件(ActionChains類提供了鼠標操作的常用方法)
①執行所有該類中存儲的行為perform()
②右擊context_click()
③雙擊double_click()
④拖動drag_and_drop(源元素,釋放的目標元素)
⑤鼠標懸停move_to_element()
ActionChains(driver).move_to_element(a).perform()
(4) 鍵盤事件(Keys類)
①刪除鍵(BackSpace)send_keys(Keys.BACK_SPACE)
②空格鍵(Space) send_keys(Keys.SPACE)
③制表鍵(Tab) send_keys(Keys.TAB)
④回退鍵(Esc) send_keys(Keys.ESCAPE)
⑤回車鍵(Enter) send_keys(Keys.ENTER)
⑥全選(Ctrl+A) send_keys(Keys.CONTROL,’a’)
⑦復制(Ctrl+C)send_keys(Keys.CONTROL,’c’)
⑧剪切(Ctrl+X)send_keys(Keys.CONTROL,’x’)
⑨粘貼(Ctrl+V)send_keys(Keys.CONTROL,’v’)
⑩鍵盤F1 send_keys(Keys.F1)
(5) 獲得驗證信息
①獲取標簽對之間的文本信息 text
②獲得當前頁面的標題 title
③獲得當前頁面的URL current_url
(6) 設置元素等待
①顯式等待(使WebDriver等待某個條件成立時繼續執行,否則在達到最大時長時拋出超時異常TimeoutException)
方法:WebDriverWait類(由until()或until_not()方法配合使用),在設置時間內,默認每隔一段時間檢測一次當前頁面元素是否存在,如果超過時間檢測不到則拋出異常,格式:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:瀏覽器驅動
timeout:最長超時時間,默認以秒為單位
poll_frequency:檢測的間隔(步長)時間,默認0.5s
ignored_exceptions:超時后的異常信息,默認拋NoSuchElementException異常
until(method,message=’’)調用該方法提供的驅動程序作為一個參數,直到返回值為True
until_not(method,message=’’)調用該方法提供的驅動程序作為一個參數,直到返回值為False
例:element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,”kw”)))
expected_conditions類提供了預期條件判斷方法
判斷元素是否存在
②隱式等待(通過一定時長等待頁面上某元素加載完成,如果超出了設置的時長元素還沒有被加載,則拋出NoSuchElementException異常)
方法:implicitly_wait(),默認設置為0
例:driver. implicitly_wait(10),當腳本執行到某個元素定位時,如果元素可以定位,則繼續執行,如果定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到,假設第6秒定位到了元素則繼續執行,若直到超出設置時長(10秒)還沒定位到元素,則拋出異常
③sleep休眠方法(Python的time模塊提供sleep()方法),默認秒為單位
(7) 定位一組元素
find_elements_by_....()
使用場景:批量操作元素,如勾選復選框
先獲取一組元素,再從這組對象中過濾出需要操作的元素,如定位頁面上所有的checkbox,然后選擇其中一個
len()方法可以用來計算元素的個數
pop()方法用於獲取列表中的一個元素(默認為最后一個元素,pop(0)獲取第一個…),並返回該元素的值
(8) 多表單切換
switch_to.frame(“”)將當前定位的主體切換為frame/iframe表單的內嵌頁面中
切換方式:id,name,index
switch_to.parent_content()跳出當前一級表單
switch_to.default_content()跳回最外層的頁面
(9) 多窗口切換
switch_to.window()用於切換到相應的窗口
current_window_handle獲得當前窗口句柄
window_handles返回所有窗口的句柄到當前會話
(10) 警告框處理
使用switch_to.alert()方法定位到警告消息框alert/確認消息框confirm/提示消息對話prompt,然后使用text/accept/dismiss/send_keys()等方法進行操作
text 返回alert/confirm/prompt中的文字信息
accept()接受現有警告框
dismiss()解散現有警告框
send_keys(keysToSend)發送文本至警告框
(11) 上傳文件
Web頁面的上傳功能實現方式:
a.普通上傳:普通的附件上傳是將本地文件的路徑作為一個值放在input標簽中,通過form表單將這個值提交給服務器
找到上傳的input標簽,通過send_keys()方法向其輸入一個文件地址來實現上傳
b.插件上傳:一般是指基於flash/js/ajax等技術所實現的上傳功能
AutoIt
(12) 下載文件
借助AutoIt來操作Windows控件進行下載
(13) 操作Cookie(是以字典的形式存放的)
get_cookies()獲得所有cookie信息
get_cookie(name)返回字典的key為“name”的cookie信息
add_cookie(cookie_dict)添加cookie;cookie_dict指字典對象,必須有name和value
delete_cookie(name,optionsString)刪除cookie信息
要刪除的cookie名稱,該cookie的選項(路徑、域)
delete_all_cookies()刪除所有cookie信息
(14) 調用JavaScript(控制瀏覽器的滾動條,向頁面中textarea文本框輸入內容)
execute_script()方法來執行JavaScript代碼
window.scrollTo(左邊距,上邊距)方法用於設置瀏覽器窗口滾動條的水平和垂直位置
(15) 處理HTML5的視頻播放
通過js
load()加載、play()播放、pause()暫停
(16) 窗口截圖
Get_screenshot_as_file(“指定截圖圖片的保存”a\\b\\x.gif)來截取當前窗口
(17) 關閉窗口
close()關閉當前窗口
quit()退出相關的驅動程序和關閉所有窗口
(18) 驗證碼的處理
a.去掉驗證碼,正式環境風險大
b.設置萬能驗證碼,randint()用於生成隨機數,范圍1000-9999
c.驗證碼識別技術,python-tesseract
d.記錄cookie,通過向瀏覽器添加cookie可以繞過登陸的驗證碼,如首次登陸選擇“記住密碼”;可以通過add_cookie()方法將用戶名密碼寫入瀏覽器cookie,可用get_cookies()方法來獲取所有cookie信息,從中找到用戶名和密碼的key
e.找開發,給測試賬號固定一個驗證碼
(19) 單選radiobox
表現形式:<input id=”” type=”radio”name=”u2”>
radiobox=driver.find_element_by_name(“u2”).click
select=radiobox.pop(2).is_selected()
檢查這個單選框是否被選中
(20) 復選checkbox
表現形式:<input type=”checkbox”name=”season”>
inputs=driver.find_elements_by_name(“season”)
for input in inputs:
ifinput.get_attribute(“type”)==’checkbox’;
input.click()
(21) 下拉菜單select
表現形式:<select name=”select”>
<option value=”zhangsan”>aaa</option>
……
</select>
Select(driver.find_element_by_id(“areaID”)).select_by_index(1)
……value(“2”)##代碼中的值
……visible_text(“北京”)##下拉框拉下來可見的值
(22) Button
表現形式:<input class=”button”type=”button”disabled=”disabled”value=”Submit”>
<button class=”button”disabled=”disabled”>Submit</button>
操作:
WebElement element=driver.findElement(By.className(“button”));
Element.click();
button=element.isenabled();
檢查這個按鈕是不是可點擊的
可以用如下代碼判斷Alert是否存在,在IE8上測試通過
Java代碼
- public boolean isAlertPresent(){
- try
- {
- driver.switchTo().alert();
- return true;
- }
- catch (NoAlertPresentException Ex)
- {
- return false;
- }
用如下方法獲取Alert上的Message:
Java代碼
- public String getAlert()
- {
- Alert alert = driver.switchTo().alert();
- String str = alert.getText();
- alert.accept();
- return str;
- }
當頁面上有不確定數量的Alert將要出現的時候,可以用while或者for循環去關閉所有的Alert
Java代碼
- while (isAlertPresent()){
- driver.switchTo().alert().accept();
- pause (3000);
- }