元素識别方法、一組元素定位、滑鼠操作、多視窗處理、下拉框、文本域及富文本框、彈窗、JS、frame、檔案上傳和下載下傳
元素識别方法:
1 driver.find_element_by_id()
2 driver.find_element_by_name()
3 driver.find_element_by_class_name()
4 driver.find_element_by_tag_name()
5 driver.find_element_by_link_text()
6 driver.find_element_by_partial_link_text()
7 driver.find_element_by_xpath()
8 driver.find_element_by_css_selector()
web UI自動化測試元素識别的原則是什麼?
如果有唯一的id,就用id定位元素;
如果沒有,最好使用xpath定位;
如果xpath定位失敗,哪個可行使用哪個。
一組元素定位:
1 driver.find_element_by_link_text("複選框").click()
2 inputs = driver.find_elements_by_tag_name("input")
3 for input in inputs:
4 if input.get_attribute("type") =="checkbox": #避免定位的不唯一性
5 input.click()
滑鼠操作:
1 from selenium.webdriver.common.action_chains import ActionChains 導入控制滑鼠事件的方法
2 1、#滑鼠懸停
3 mm = driver.find_element_by_link_text("設定")
4 ActionChains(driver).move_to_element(mm).perform()
5 #頁面顯示并可點選的都可以嘗試用超級連結
6 driver.find_element_by_link_text("搜尋設定").click()
7 2、#滑鼠右擊
8 right =driver.find_element_by_xpath("xx")
9 ActionChains(driver).context_click(right).perform()
10 3、#滑鼠輕按兩下
11 double =driver.find_element_by_xpath("xxx")
12 ActionChains(driver).double_click(double).perform()
13 4、#滑鼠拖放
14 #定位元素的原位置
15 element = driver.find_element_by_name("xxx")
16 #定位元素要移動到的目标位置
17 target = driver.find_element_by_name("xxx")
18 #執行元素的移動操作
19 ActionChains(driver).drag_and_drop(element, target).perform()
20 5、#滑鼠左鍵
21 left=driver.find_element_by_xpath("xxx")
22 ActionChains(driver).click_and_hold(left).perform()
多視窗處理:
1 curr_handle = driver.current_window_handle #獲得目前句柄
2 print("curr_handle=",curr_handle) #列印目前句柄
3 time.sleep(3)
4 driver.find_element_by_link_text("python自動化測試").click()
5 all_handle = driver.window_handles #擷取所有的句柄
6 for i in all_handle:
7 if i != curr_handle: #如果不等于之前定義的句柄
8 driver.switch_to_window(i) #切換到另一個句柄
9 time.sleep(2)
10 curr_handle1 = driver.current_window_handle
11 print("curr_handle1=",curr_handle1)
12 print(driver.title) #列印title
13 driver.quit()
下拉框:
1 #兩種方式實作下拉框的選擇操作
2 from selenium import webdriver
3 from selenium.webdriver.support.select import Select
4
5 driver = webdriver.Firefox()
6 driver.get("file:///C:/Users/jia_myself/Desktop/1.html")
7 ele = driver.find_element_by_xpath(".//*[@id='status']")
8 # Select(ele).select_by_index(2) #下标形式選擇
9 Select(ele).select_by_value("2") #源碼value值相對應方式
10
11 '''html
12 <select id="status" class="form-control valid" onchange="" name="status">
13 <option value=""></option>
14 <option value="0">未稽核</option>
15 <option value="1">初審通過</option>
16 <option value="2">複審通過</option>
17 <option value="3">稽核不通過</option>
18 </select>
19 '''
20 另一種下拉框的編寫形式:
21 driver.find_element_by_xpath("//*[@id='status']/option[3]").click() #初審通過
22 driver.find_element_by_xpath("//option[@value='1']").click() #初審通過
文本域及富文本框:
一般用js進行執行,如下示例
文本域輸入:document.getElementById('_ComContent1').innerHTML="xxxxx"
富文本框輸入:document.getElementById('_ComContent1').contentWindow.document.body.innerHTML="xxxxx"
1 文本域的輸入:
2 js = "document.getElementById('_ComContent1').innerHTML='在超市賣嗎'"
3 element = dr.find_element_by_xpath(".//*[@id='_ComContent1']")
4 dr.execute_script(js,element)
5
6 富文本框的輸入:
7 js = "document.getElementById('_ComContent1').contentWindow.document.body.innerHTML='在超市賣嗎'"
8 element = dr.find_element_by_xpath(".//*[@id='_ComContent1']")
9 dr.execute_script(js,element)
彈窗:
alert彈窗
1 driver.find_element_by_id("alert").click() #定位并點選
2 time.sleep(5)
3 alert = driver.switch_to_alert() #切換到彈窗上
4 print(alert.text) #列印彈窗資訊
5 alert.accept() #确定
6 #alert.dismiss() #取消
confirm彈窗
1 driver.find_element_by_id("confirm").click() #定位并點選
2 comfirm = driver.switch_to_alert() #切換到彈窗上
3 print(comfirm.text) #列印彈窗資訊
4 comfirm.accept() #确認
5 # comfirm.dismiss() #取消
6
7 # driver.switch_to_alert().accept() #直接點選确定
prompt彈窗
1 driver.find_element_by_id("prompt").click() #定位并點選彈出彈窗
2 prompt = driver.switch_to_alert() #切換并定位到彈窗
3 print(prompt.text) #列印彈窗上的資訊
4 prompt.send_keys("我愛你你可知道") #輸入内容
5 prompt.accept() #确認
6 # prompt.dismiss() #取消
JS:
1 #先定義兩個滑動頁面的方法并定義js語句,執行直接調用即可
2 def scroll_top():
3 if driver.name == "chrome":
4 js = "var q=document.body.scrollTop=0"
5 else:
6 js = "var q=document.documentElement.scrollTop=0"
7 return driver.execute_script(js)
8
9 def scroll_foot():
10 if driver.name == "chrome":
11 js = "var q=document.body.scrollTop=10000"
12 else:
13 js = "var q=document.documentElement.scrollTop=10000"
14 return driver.execute_script(js)
15
16 scroll_foot() #調用滑到頁底
1 #更改屬性,隐藏形式改為文本形式
2 driver.execute_script("document.getElementById('em').type='text';")
3 #執行一個彈窗
4 driver.execute_script("alert('顯示出來啦!')")
frame:
1 driver.find_element_by_link_text("frame2").click()
2 driver.switch_to_frame("frame1") #通過id定位
3 # driver.switch_to_frame("myframe") #通過name定位
4 driver.find_element_by_link_text("我為自己代言").click() #我為自己代言為frame1的超文本連結
檔案上傳:
1 #定位上傳按鈕,添加本地檔案
2 driver.find_element_by_name("file").send_keys('D:/selenium_use_case/upload_file.txt')
檔案下載下傳:
1 import os
2 from selenium import webdriver
3
4 fp = webdriver.FirefoxProfile()
5 fp.set_preference("browser.download.folderList",2)
6 fp.set_preference("browser.download.manager.showWhenStarting",False)
7 fp.set_preference("browser.download.dir", os.getcwd())
8 fp.set_preference("browser.helperApps.neverAsk.saveToDisk",
9 "application/octet-stream")
10
11 browser = webdriver.Firefox(firefox_profile=fp)
12 browser.get("http://pypi.python.org/pypi/selenium")
13 browser.find_element_by_partial_link_text("selenium-2").click()
14
15 注釋:
16 browser.download.dir 用于指定所下載下傳檔案的目錄。
17 os.getcwd() 該函數不需要傳遞參數,用于傳回目前的目錄。
18 application/octet-stream 為内容的類型。