Selenium的基本api
1、打開瀏覽器的驅動,以chrome為例
from selenium import webdriver #chrome驅動 driver = webdriver.Chrome(executable_path="c:\\chromedriver") driver.get('http://www.baidu.com') driver.find_element_by_id("kw") #返回一個頁面元素 driver.find_element_by_id("kw").send_keys("光榮之路")
2、瀏覽器最大化,前進和后退
>>> driver.maximize_window() #瀏覽器窗口最大化 >>> driver.back() #瀏覽器后退 >>> driver.forward() #瀏覽器前進
3、強制刷新
>>> driver.refresh() #強制刷新頁面
4、控制瀏覽器的位置:把瀏覽器放到固定的位置
>>> driver.set_window_position(y=200, x=400) >>> position = driver.get_window_position() >>> position {'x': 400, 'y': 200}
5、設置窗口大小
>>> driver.set_window_size(width = 200, height = 400, windowHandle='current') >>> driver.get_window_size() {'width': 516, 'height': 400}
6、獲取title,判斷在哪個頁面
>>> driver.get("http://iciba.com") >>> driver.title '在線翻譯_在線詞典_金山詞霸_愛詞霸英語'
7、獲取源碼
>>> driver.get("http://iciba.com") >>> driver.page_source[:50] '<!DOCTYPE html><html xmlns="http://www.w3.org/1999'
8、斷言源碼中的關鍵字
>>> assert "英語" in driver.page_source #源碼中存在 >>> assert "英語1" in driver.page_source #源碼中不存在 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError
9、獲取當前url
>>> driver.current_url
10、句柄操作
# 獲取當前窗口句柄
now_handle = driver.current_window_handle
# 獲取所有窗口句柄
all_handles = self.driver.window_handles
# 切換窗口
self.driver.switch_to.window(handle)
拿到句柄就像找到了窗口。
切換句柄代碼舉例:
#encoding=utf-8 import unittest import time import chardet from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self): # 啟動chrome瀏覽器 self.driver = webdriver.Chrome() def test_operateWindowHandle(self): url = "http://www.baidu.com" self.driver.get(url) # 獲取當前窗口句柄 now_handle = self.driver.current_window_handle # 打印當前獲取的窗口句柄 print (now_handle) # 百度搜索輸入框中輸入“selenium” self.driver.find_element_by_id("kw").send_keys("w3cschool") # 點擊搜索按鈕 self.driver.find_element_by_id("su").click() # 導入time包 import time # 等待3秒,以便網頁加載完成 time.sleep(3) # 點擊w3school在線教育鏈接 self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click() time.sleep(5) # 獲取所有窗口句柄 all_handles = self.driver.window_handles print(all_handles) # 循環遍歷所有窗口句柄 for handle in all_handles: self.driver.switch_to.window(handle) #判斷源碼的關鍵字 print('*'*50) print(self.driver.current_url) print('*'*50) if "百度熱榜" in self.driver.page_source: time.sleep(5) self.driver.find_element_by_xpath("//*[@id='5']/h3/a").click() time.sleep(5) self.driver.close() elif "培訓和測試" in self.driver.page_source: time.sleep(5) self.driver.find_element_by_xpath('//*[@id="course"]/ul/li[5]/a').click() time.sleep(5) def tearDown(self): # 退出IE瀏覽器 self.driver.quit() if __name__ == '__main__': unittest.main()

11、獲取頁面元素的基本信息
driver.get("https://www.baidu.com") newsElement = driver.find_element_by_xpath("//*[text()='新聞']") print (u"元素的標簽名:", newsElement.tag_name) #元素的標簽名: a print (u"元素的size:", newsElement.size) #元素的size: {'height': 23, 'width': 26} print(u"元素的文本:",newsElement.text) #元素的文本: 新聞 print(u"元素的鏈接:",newsElement.get_attribute("href")) #元素的鏈接: http://news.baidu.com/
12、判斷頁面元素是否顯示
driver.get(url) div1 = driver.find_element_by_id("div1") print (div1.is_displayed()) #判斷是否見
13、判斷元素是否可操作
driver.get(url)
input1 = self.driver.find_element_by_id("input1")
print (input1.is_enabled())
14、頁面元素的屬性
driver.get(url) # 找到搜索輸入框元素 searchBox = driver.find_element_by_id("query") # 獲取搜索輸入框頁面元素的name屬性值 print (searchBox.get_attribute("name")) # 向搜索輸入框中輸入“測試工程師指定的輸入內容”內容 searchBox.send_keys(u"測試工程師指定的輸入內容") # 獲取頁面搜索框的value屬性值(即搜索輸入框的文字內容) print (searchBox.get_attribute("value"))
15、獲取css屬性值
driver.get(url) searchBox = driver.find_element_by_id("kw") searchBox.value_of_css_property("height") searchBox.value_of_css_property("width") searchBox.value_of_css_property("font-family")
16、清空輸入框
driver.get(url) input = driver.find_element_by_id("kw") input.send_keys(u"測試開發招聘") input.clear() #清空輸入框
17、單擊元素
driver.get(url) button = driver.find_element_by_id("button") button.click() #模擬鼠標左鍵單擊操作
18、雙擊元素
from selenium.webdriver import ActionChains driver.get(url) inputBox = driver.find_element_by_id("inputBox") action_chains = ActionChains(driver) action_chains.double_click(inputBox).perform() #固定用法
19、操作下拉框
方法1:
driver.get(url) # 使用name屬性找到頁面上name屬性為“fruit”的下拉列表元素 select = self.driver.find_element_by_name("fruit") all_options = select.find_elements_by_tag_name("option") for option in all_options: if option.text =="獼猴桃": option.click()
方法2:
driver.get(url) # 導入Select模塊 from selenium.webdriver.support.ui import Select # 使用xpath定位方式獲取select頁面元素對象 select_element = Select(driver.find_element_by_xpath("//select")) # 方法一:通過序號選擇第二個元素,序號從0開始 select_element.select_by_index(1) # 方法二:通過選項的顯示文本選擇文本為“獼猴桃”選項 select_element.select_by_visible_text("獼猴桃") # 方法三:通過選項的value屬性值選擇value=“shanzha”選項 select_element.select_by_value("shanzha")
20、斷言
繼承unittest.TestCase,使用 assertListEqual()
21、操作多選框
driver.get(url) # 導入Select模塊 from selenium.webdriver.support.ui import Select # 使用xpath定位方式獲取select頁面元素對象 select_element = Select(driver.find_element_by_xpath("//select")) #選中 # 通過序號選擇第一個元素 select_element.select_by_index(0) # 通過選項的文本選擇“山楂”選項 select_element.select_by_visible_text("山楂") # 通過選項的value屬性值選擇value=“mihoutao”的選項 select_element.select_by_value("mihoutao") #取消選中 # 通過選項文本取消已選中的文本為“荔枝”選項 select_element.deselect_by_visible_text("荔枝") # 通過序號取消已選中的序號為1的選項 select_element.deselect_by_index(1) # 通過選項的value屬性值取消已選中的value=“juzi”的選項 select_element.deselect_by_value("juzi")
22、操作單選框
driver.get(url) # 使用xpath定位獲取value屬性值為'berry'的input元素對象,也就是“草莓”選項 berryRadio = driver.find_element_by_xpath("//input[@value='berry']") # 點擊選擇“草莓”選項 berryRadio.click() # 斷言“草莓”復選框被成功選中 assertTrue(berryRadio.is_selected(), u"草莓復選框未被選中!")
23、操作復選框:同上
24、截圖
driver.get_screenshot_as_file(filename)
25、拖拽元素
initialPosition = driver.find_element_by_id("draggable") targetPosition = driver.find_element_by_id("draggable2") from selenium.webdriver import ActionChains action_chains = ActionChains(driver) # 將頁面上第一個能被拖拽的元素拖拽到第二個元素位置 action_chains.drag_and_drop(initialPosition, targetPosition).perform()
26、鍵盤操作
#encoding=utf-8 import unittest import time import chardet from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_simulateASingleKeys(self): url = "http://www.baidu.com" self.driver.get(url) # 導入模擬按鍵模塊Keys from selenium.webdriver.common.keys import Keys # 輸入框輸入內容 self.driver.find_element_by_id("kw").send_keys("seleniumm") time.sleep(5)
#通過WebDriver實例發送一個F12鍵 self.driver.find_element_by_id("kw").send_keys(Keys.F12) time.sleep(5)
# 刪除多輸入的一個 m self.driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) time.sleep(10) # 輸入空格鍵+“教程” self.driver.find_element_by_id("kw").send_keys(Keys.SPACE) self.driver.find_element_by_id("kw").send_keys("教程") time.sleep(10) # ctrl+a 全選輸入框內容 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a') time.sleep(10) # ctrl+x 剪切輸入框內容 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x') time.sleep(10) # ctrl+v 粘貼內容到輸入框 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v') time.sleep(10) # 通過回車鍵來代替單擊操作 self.driver.find_element_by_id("su").send_keys(Keys.ENTER) time.sleep(10) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
27、鼠標右鍵
#鼠標右鍵 #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver import ActionChains import win32clipboard as w import win32con # 設置剪切板內容 def setText(aString): w.OpenClipboard() w.EmptyClipboard() w.SetClipboardData(win32con.CF_UNICODETEXT, aString) w.CloseClipboard() class VisitSogouByIE(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() def test_rigthClickMouse(self): url = "http://www.sogou.com" # 訪問搜狗首頁 self.driver.get(url) # 找到搜索輸入框 searchBox = self.driver.find_element_by_id("query") # 將焦點切換到搜索輸入框 searchBox.click() time.sleep(2) # 在搜索輸入框上執行一個鼠標右鍵點擊操作 ActionChains(self.driver).context_click(searchBox).perform() # 將“gloryroad”數據設置到剪切板中,相當于執行了復制操作 setText(u'gloryroad') time.sleep(4) # 發送一個粘貼命令,字符p指代粘貼操作 ActionChains(self.driver).send_keys('P').perform() # 點擊搜索按鈕 self.driver.find_element_by_id('stb').click() time.sleep(10) def tearDown(self): # 退出IE瀏覽器 self.driver.quit() if __name__ == '__main__': unittest.main()
28、模擬鼠標左鍵和釋放
from selenium.webdriver import ActionChains driver.get(url) div = driver.find_element_by_id("div1") # 在id屬性值為“div1”的元素上執行按下鼠標左鍵,并保持 ActionChains(driver).click_and_hold(div).perform() # 在id屬性值為“div1”的元素上釋放一直釋放的鼠標左鍵 ActionChains(driver).release(div).perform()
29、鼠標懸浮
from selenium.webdriver import ActionChains driver.get(url) # 找到頁面上的鏈接元素 link = driver.find_element_by_partial_link_text(u"指過來") # 找到頁面上的p元素 p = driver.find_element_by_xpath("//p") # 將鼠標懸浮到第一個鏈接元素上 ActionChains(driver).move_to_element(link).perform() # 將鼠標從第一個鏈接元素移動到p元素上 ActionChains(driver).move_to_element(p).perform()
30、判斷頁面元素是否存在
driver.find_element(by, value) # 判斷頁面元素id屬性值為“query”的頁面元素是否存在 driver.find_element("id", "query")
driver.find_element("xpath", "http://input[@id='query']")
31、設置隱式等待
driver.implicitly_wait(10)
32、設置顯式等待
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions driver = webdriver.Chrome() driver.get("http://www.sogou.com") input_box=driver.find_element_by_id("query") #等待10s,每200毫秒重試一次 wait = WebDriverWait(driver, 10, 0.2) # 每200ms判斷一次是否元素可見 wait.until(expected_conditions.visibility_of(input_box))
33、切入切出frame
#1 使用索引方式進入指定的frame頁面,索引號從0開始。 driver.switch_to.frame(0) #2 通過標簽名找到頁面中所有的frame元素,然后通過索引進入該frame driver.switch_to.frame(driver.find_elements_by_tag_name("frame")[1]) #3 通過id進入frame driver.switch_to.frame(driver.find_element_by_id("rightframe"))
#4 退出frame
driver.switch_to.default_content()
33、指定頁面的加載時間
driver.set_page_load_timeout(4)
34、操作alert框
# 獲取alert對象 alert = driver.switch_to.alert # 使用alert.text屬性獲取alert框中的內容,并斷言文字內容 assertAlmostEqual(alert.text, u"這是一個 alert 彈出框") # 調用alert對象的accept()方法,模擬鼠標單擊alert彈窗上的“確定”按鈕,以便關閉alert窗 alert.accept() # 取消按鈕,模擬單擊confirm框上的“取消”按鈕 alert.dismiss()
35、獲取cookie
#得到當前頁面下所有的Cookies driver.get_cookies() #根據Cookie的name值獲取該條Cookie信息 driver.get_cookie("SUV") # 刪除cookie有2種方法 # 第一種:通過Cookie的name屬性,刪除name值為“ABTEST”的Cookie信息 driver.delete_cookie("ABTEST") # 第二種:一次性刪除全部Cookie信息 driver.delete_all_cookies() # 添加自定義Cookie信息 driver.add_cookie({"name": "gloryroadTrain", 'value': '1479697159269020'})
36、鍵盤的上下左右操作
driver.get("http://baidu.com") 搜索:element=driver.find_element_by_name("wd") 導入Keys: from selenium.webdriver.common.keys import Keys 回車:element.send_keys(Keys.ENTER) 清理:element.clear() 上:element.send_keys(Keys.ARROW_UP) 下:element.send_keys(Keys.ARROW_DOWN) 左:element.send_keys(Keys.ARROW_LEFT) 右:element.send_keys(Keys.ARROW_RIGHT)
浙公網安備 33010602011771號