自動化九:selenium高級API

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
}
'''
相關文章
相關標籤/搜索