python3 操作頁面上各種元素的方法


(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代碼  

  1. public boolean isAlertPresent(){  
  2.         try  
  3.         {  
  4.             driver.switchTo().alert();  
  5.             return true;  
  6.         }     
  7.         catch (NoAlertPresentException Ex)  
  8.         {  
  9.             return false;  
  10. }     

 用如下方法獲取Alert上的Message:

Java代碼  

  1. public String getAlert()  
  2.   {  
  3.       Alert alert = driver.switchTo().alert();  
  4.       String str = alert.getText();  
  5.   
  6.       alert.accept();  
  7.       return str;  
  8.   }    

 

當頁面上有不確定數量的Alert將要出現的時候,可以用while或者for循環去關閉所有的Alert

Java代碼  

  1. while (isAlertPresent()){  
  2.         driver.switchTo().alert().accept();  
  3.         pause (3000);  
  4.        }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM