selenium高級APIcss
driver = webdriver.Chrome(executable_path='D:\\chromedriver.exe')
# 窗口最大化web
driver.maximize_window()
# 前進與後退(安全的:就是等待頁面加載完了以後才往下面繼續執行)chrome
driver.back() # 前進 driver.forward() # 後退
# 強制刷新api
driver.refresh()
# 查看瀏覽器的座標瀏覽器
driver.get_window_position()
# 設置瀏覽器的座標安全
driver.set_window_position(200, 400)
# 獲取瀏覽器的大小app
driver.get_window_size() #結果:{'width': 1050, 'height': 708}
# 改變瀏覽器的大小ide
driver.set_window_size(100,100)
# 獲取title測試
driver.title
# 獲取網頁原碼字體
driver.page_source
# 獲取當前頁面的url
driver.current_url
# 獲取當前窗口的句柄,# 切換句柄(切換頁面)
handle = driver.current_window_handle
driver.switch_to.window(handle)
# 獲取瀏覽器打開的全部頁面的句柄
all_handles = driver.window_handles
# 關閉當前句柄(窗口)
driver.close()
# 獲取元素的信息
newsElement = driver.find_element_by_xpath('//*[@id=config]') print("元素的標籤名稱:", newsElement.tag_name) print("元素的size:", newsElement.size) print("元素的文本:", newsElement.text) print("元素的連接:", newsElement.get_attribute('href')) print("元素的連接:", newsElement.get_property('href'))
# 判斷元素是否顯示在頁面上
div2 = driver.find_element_by_id("div2") print(div2.is_displayed())
# 判斷元素是否可操做
ele1 = driver.find_element_by_id('input') ele1.is_enabled()
# 元素執行js
driver.execute_script('document.getElementById("input").disabled=false;')
# 獲取輸入框輸入的內容
elel = driver.find_element_by_id('kw') elel.send_keys('自動化') print(elel.get_attribute('value')) print(elel.get_attribute('name')) # 獲取屬性name的值
# 獲取輸入框的長、寬、字體屬性
driver.get('http:\\www.baidu.com') elel = driver.find_element_by_id('kw') print(elel.value_of_css_property('height')) print(elel.value_of_css_property('width')) print(elel.value_of_css_property('font-family'))
# 清空輸入框
driver.get('http:\\www.baidu.com') elel = driver.find_element_by_id('kw') elel.send_keys('zidonghua') elel.clear() # 清空輸入框
# 輸入
driver.get('http:\\www.baidu.com') elel = driver.find_element_by_id('kw') elel.send_keys('zidonghua') # 輸入
# 單擊
elel.click()
# 雙擊
from selenium.webdriver import ActionChains action_Chains = ActionChains(driver) action_Chains.double_click(elel).perform()
# 下拉框選擇
# 方式一 select = driver.find_element_by_name('fruit') all_options = select.find_element_by_tag_name("option") for option in all_options: if option.text == "獼猴桃": option.click() time.sleep(2) # 方式二 from selenium.webdriver.support.ui import Select select_ele = Select(driver.find_element_by_xpath("//select")) print(select_ele.first_selected_option.text) # 打印默認選中項的文本 all_options = select_ele.options # 獲取全部選擇項的頁面元素對象 if all_options[1].is_enabled() and not all_options[1].is_selected(): # 經過須要來選擇第二個元素,序號從0開始 select_ele.select_by_index(1) print(select_ele.all_selected_options[0].text) # 打印已選中項的文本 # 方法二:經過選項顯示的文本選擇文本爲「獼猴桃」選項 select_ele.select_by_visible_text("獼猴桃") assert select_ele.all_selected_options[0].text == "獼猴桃" # 斷言選中的是不是獼猴桃 time.sleep(2) # 方法三:經過選項的value屬性值選擇value="shanzha" select_ele.select_by_value("shanzha") assert select_ele.all_selected_options[0].text == "山楂" # 斷言選中的是個是山楂
# 斷言下拉框包含的指定選項
from selenium.webdriver.support.ui import Select select_element = Select(driver.find_element_by_xpath("//select")) actual_options = select_element.options expect_optionsList = ['桃子',"西瓜","橘子","獼猴桃","山楂","荔枝"] actual_optionsList = list(map(lambda option:option.text, actual_options)) assert expect_optionsList == actual_optionsList
# 操做多選的選擇列表
from selenium.webdriver.support.ui import Select select_element = Select(driver.find_element_by_xpath("//select")) select_element.select_by_visible_text("山楂") # 經過文本選擇「山楂」選項 select_element.select_by_value("mihoutao") # 經過value屬性值選擇value="mihoutao"的選項 select_element.select_by_index(1) # 經過index選擇 for option in select_element.all_selected_options: # 打印全部的選中項文本 print(option.text) select_element.deselect_by_visible_text("荔枝") # 經過文本方式取消選項 select_element.deselect_by_index(1) # 經過index的方式取消選項 select_element.deselect_by_value("juzi") # 經過value屬性的方式取消選項 select_element.deselect_all() # 取消全部已選中項
# 操做能夠輸入的下拉列表(不支持Chrome和firefox)
from selenium.webdriver.common.keys import Keys driver.find_element_by_id("select").clear() # 清空選項框 driver.find_element_by_id("select").send_keys('c') # 輸入字母,模糊查詢 driver.find_element_by_id("select").send_keys(Keys.ARROW_DOWN) # 向下移動 driver.find_element_by_id("select").send_keys(Keys.ARROW_DOWN) # 向下移動 driver.find_element_by_id("select").send_keys(Keys.ENTER) # 確認選擇
# 單選框
berryRadio = driver.find_elements_by_xpath("//input[@value='berry']") # 找到草莓選項 berryRadio.click() # 點擊選擇草莓 assert berryRadio.is_selected() # 斷言草莓選項是否被選中 if berryRadio.is_selected(): watermelonRadio = driver.find_elements_by_xpath("//input[@value='watermelon']") watermelonRadio.click() assert not berryRadio.is_selected() # 由於是單選,選擇了西瓜,斷言判斷草莓選項是不是未選中狀態 time.sleep(2)
# 複選框
berryCheckBox = driver.find_elements_by_xpath('//input[@value="berry"]') berryCheckBox.click() assert berryCheckBox.is_selected() if berryCheckBox.is_selected(): berryCheckBox.click() assert not berryCheckBox.is_selected() checkBoxList = driver.find_elements_by_xpath("input[@name='fruit']") for box in checkBoxList: if not box.is_selected(): box.click()
# 截屏一(selenium自帶的,只截瀏覽器的屏幕)
result = driver.get_screenshot_as_file("D:\\baidu.png")
# 截屏二(操做系統的截屏,截取整個屏幕的)
driver.get('http:\\www.baidu.com') from PIL import ImageGrab im = ImageGrab.grab() im.save("D:\\baidu.png")
# 拖拽頁面元素
# 第一個元素的位置 initiablPosition = driver.find_element_by_id('draggable') # 第二個元素的位置 targetPosition = driver.find_element_by_id('draggable2') # 第三個元素的位置 dragElement = driver.find_element_by_id('draggable3') from selenium.webdriver import ActionChains """ 建立一個新的ActionChains,將webdriver實例對象driver做爲參數值傳入 而後經過webdriver 實例執行用戶操做 """ action_chains = ActionChains(driver) action_chains.drag_and_drop(initiablPosition, targetPosition).perform() # 將頁面上第一個能被拖拽的元素拖拽到第二個元素的位置 for i in range(5): # 將頁面上第三個能被拖拽的袁術,向右下拖動10個像素,共拖5次 action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform() time.sleep(2)
# 模擬鍵盤操做
driver.get('http:\\www.sogo.com') from selenium.webdriver.common.keys import Keys import time # 經過ID獲取搜索輸入框的頁面元素 query = driver.find_element_by_id('query') query.send_keys(Keys.F12) # 經過webdriver實例發送一個F12鍵 time.sleep(3) query.send_keys(Keys.F12) # 再次經過webdriver實例模擬發送一個F12鍵 query.send_keys("selenium") # 在搜索框中,輸入 selenium query.send_keys(Keys.ENTER) # 經過webdriver實例模擬發送一個回車鍵 time.sleep(3)
# 模擬組合鍵操做
#encoding=utf-8 import unittest import time import chardet from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.keys import Keys # 導入模擬組合按鍵須要的包 import win32api import win32con import time VK_CODE ={ 'enter':0x0D, 'ctrl':0x11, 'a':0x41, 'v':0x56, 'x':0x58 } #鍵盤鍵按下 def keyDown(keyName): win32api.keybd_event(VK_CODE[keyName], 0, 0, 0) #鍵盤鍵擡起 def keyUp(keyName): win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) class VisitSogouByIE(unittest.TestCase): def setUp(self): #啓動IE瀏覽器 #self.driver = webdriver.Firefox(executable_path = "e:\\geckodriver") self.driver = webdriver.Ie(executable_path = "D:\\IEDriverServer") def test_simulationCombinationKeys(self): url = "http://www.sogou.com" # 訪問搜狗首頁 self.driver.get(url) # 找到搜索輸入框元素 searchBox = self.driver.find_element_by_id("query") # 將焦點切換到搜索輸入框中 searchBox.click() # 搜索輸入框中輸入「光榮之路自動化測試」 searchBox.send_keys(u"光榮之路自動化測試") # 稍微等待幾秒,防止太快串命令 time.sleep(3) # 模擬Ctrl + a,選中輸入框中全部的內容 keyDown('ctrl') keyDown('a') # 釋放Ctrl + a組合鍵 keyUp('a') keyUp('ctrl') # 模擬Ctrl + x剪切所選中的內容 keyDown('ctrl') keyDown('x') keyUp('x') keyUp('ctrl') # 訪問百度首頁 self.driver.get("http://www.baidu.com") # 將焦點切換到搜索輸入框中 self.driver.find_element_by_id("kw").click() # 模擬Ctrl + v組合鍵,進行粘貼 keyDown("ctrl") keyDown("v") keyUp('v') keyUp('ctrl') # 模擬回車鍵 keyDown('enter') keyUp('enter') time.sleep(5) def tearDown(self): # 退出IE瀏覽器 self.driver.quit() if __name__ == '__main__': unittest.main() ''' VK_CODE = { 'backspace': 0x08, 'tab': 0x09, 'clear': 0x0C, 'enter': 0x0D, 'shift': 0x10, 'ctrl': 0x11, 'alt': 0x12, 'pause': 0x13, 'caps_lock': 0x14, 'esc': 0x1B, 'spacebar': 0x20, 'page_up': 0x21, 'page_down': 0x22, 'end': 0x23, 'home': 0x24, 'left_arrow': 0x25, 'up_arrow': 0x26, 'right_arrow': 0x27, 'down_arrow': 0x28, 'select': 0x29, 'print': 0x2A, 'execute': 0x2B, 'print_screen': 0x2C, 'ins': 0x2D, 'del': 0x2E, 'help': 0x2F, '0': 0x30, '1': 0x31, '2': 0x32, '3': 0x33, '4': 0x34, '5': 0x35, '6': 0x36, '7': 0x37, '8': 0x38, '9': 0x39, 'a': 0x41, 'b': 0x42, 'c': 0x43, 'd': 0x44, 'e': 0x45, 'f': 0x46, 'g': 0x47, 'h': 0x48, 'i': 0x49, 'j': 0x4A, 'k': 0x4B, 'l': 0x4C, 'm': 0x4D, 'n': 0x4E, 'o': 0x4F, 'p': 0x50, 'q': 0x51, 'r': 0x52, 's': 0x53, 't': 0x54, 'u': 0x55, 'v': 0x56, 'w': 0x57, 'x': 0x58, 'y': 0x59, 'z': 0x5A, 'numpad_0': 0x60, 'numpad_1': 0x61, 'numpad_2': 0x62, 'numpad_3': 0x63, 'numpad_4': 0x64, 'numpad_5': 0x65, 'numpad_6': 0x66, 'numpad_7': 0x67, 'numpad_8': 0x68, 'numpad_9': 0x69, 'multiply_key': 0x6A, 'add_key': 0x6B, 'separator_key': 0x6C, 'subtract_key': 0x6D, 'decimal_key': 0x6E, 'divide_key': 0x6F, 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75, 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B, 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81, 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87, 'num_lock': 0x90, 'scroll_lock': 0x91, 'left_shift': 0xA0, 'right_shift ': 0xA1, 'left_control': 0xA2, 'right_control': 0xA3, 'left_menu': 0xA4, 'right_menu': 0xA5, 'browser_back': 0xA6, 'browser_forward': 0xA7, 'browser_refresh': 0xA8, 'browser_stop': 0xA9, 'browser_search': 0xAA, 'browser_favorites': 0xAB, 'browser_start_and_home': 0xAC, 'volume_mute': 0xAD, 'volume_Down': 0xAE, 'volume_up': 0xAF, 'next_track': 0xB0, 'previous_track': 0xB1, 'stop_media': 0xB2, 'play/pause_media': 0xB3, 'start_mail': 0xB4, 'select_media': 0xB5, 'start_application_1': 0xB6, 'start_application_2': 0xB7, 'attn_key': 0xF6, 'crsel_key': 0xF7, 'exsel_key': 0xF8, 'play_key': 0xFA, 'zoom_key': 0xFB, 'clear_key': 0xFE, '+': 0xBB, ',': 0xBC, '-': 0xBD, '.': 0xBE, '/': 0xBF, '`': 0xC0, ';': 0xBA, '[': 0xDB, '\\': 0xDC, ']': 0xDD, "'": 0xDE, '`': 0xC0 } '''