在自動化測試中,有時使用滑鼠或鍵盤操作确實會更加友善,但是不是必須的情況下不推薦使用滑鼠操作,因為滑鼠操作時不能移動滑鼠,否則會報錯,本節主要介紹滑鼠、鍵盤操作
一、下拉框選擇

#Select的主要用法有三種
#1.以text文本值來查找比對的元素并選擇select_by_visible_text(self, text) 選擇代理電話
Select(driver.find_element_by_xpath("//*[@name='param' and @class='select']")).select_by_visible_text("代理電話")
#2.以value屬性值來查找該option并選擇select_by_value(self, value) 選擇身份證号
Select(driver.find_element_by_xpath("//*[@name='param' and @class='select']"))..select_by_value("agent_id_card")
#3.以index屬性值來查找比對的元素并選擇select_by_index(self, index) 選擇代理名稱
Select(driver.find_element_by_xpath("//*[@name='param' and @class='select']")).select_by_value("agent_id_card")
#4.選擇第一個option 選項first_selected_option(self)----使用條件需要預設選中不是第一條
Select(driver.find_element_by_xpath("//*[@name='param' and @class='select']")).first_selected_option()
二、鍵盤操作
'''
常用的鍵盤操作主要有:
send_keys(keysToSend):發送文本至警告框
send_keys(Keys.BACK_SPACE) = BackSpace
send_keys(Keys.SPACE) = Space
send_keys(Keys.TAB) = Tab
send_keys(Keys.ESCAPE) = Esc
send_keys(Keys.ENTER) = Enter
send_keys(Keys.CONTROL,‘v’) = control + v
send_keys(Keys.CONTROL,‘a’) = Ctrl+A
send_keys(Keys.F1) = 鍵盤F1
'''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import datetime,time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
#鍵盤全選
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
time.sleep(1)
#鍵盤複制
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"c")
time.sleep(1)
#清除
driver.find_element_by_id("kw").clear()
time.sleep(1)
#鍵盤粘貼
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
time.sleep(1)
#鍵盤 确認
driver.find_element_by_id("su").send_keys(Keys.ENTER)
三、滑鼠操作
'''
有時需要在頁面上模拟滑鼠操作,比如:單擊,輕按兩下,右鍵,按住,拖拽等
可以導入ActionChains類:selenium.webdriver.common.action_chains.ActionChains
使用ActionChains(driver).XXX調用對應節點的行為
click(element):單擊某個節點;
click_and_hold(element):單擊某個節點并按住不放;
context_click(element):右鍵單擊某個節點;
double_click(element):輕按兩下某個節點;
drag_and_drop(source, target):按住某個節點拖拽到另一個節點;
drag_and_drop_by_offset(source, xoffset, yoffset):按住節點按偏移拖拽
key_down:按下特殊鍵,隻能用(Control, Alt and Shift),比如Ctrl + C
ActionChains(driver).key_down(Keys.CONTROL).send_keys(‘c’).key_up(Keys.CONTROL).perform();
key_up:釋放特殊鍵;
move_by_offset(xoffset, yoffset):按偏移移動滑鼠;
move_to_element(element):滑鼠移動到某個節點的位置;
move_to_element_with_offset(element, xoffset, yoffset):滑鼠移到某個節點并偏移;
pause(second):暫停所有的輸入多少秒;
perform():執行操作,可以設定多個操作,調用perform()
才會執行;
release():釋放滑鼠按鈕
reset_actions:重置操作
send_keys(keys_to_send):模拟按鍵,比如輸入框節點.send_keys(Keys.CONTROL,’a’)
全選輸入框内容,輸入框節點.send_keys(Keys.CONTROL,’x’)剪切,模拟回退:
節點.send_keys(keys.RETURN);或者直接設定輸入框内容:輸入框節點.send_keys(‘xxx’);
send_keys_to_element(element, *keys_to_send):和send_keys類似;
'''
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://passport.ctrip.com/user/login")
driver.maximize_window()
WebDriverWait(driver,20).until(EC.presence_of_element_located((By.ID,"nloginname")))
kw = driver.find_element_by_id("nsubmit")
#1.單擊元素
ActionChains(driver).click(kw).perform()
#2.右擊元素
ActionChains(driver).context_click(kw).perform()
#3.懸停元素
ActionChains(driver).move_to_element(kw).perform()
#結合鍵盤操作,輸入賬戶名、密碼并點選确認
username = driver.find_element_by_id("nloginname")
ac = ActionChains(driver)
ac.click(username).send_keys("123456789").send_keys(Keys.TAB).send_keys("123456789").perform()
time.sleep(2)
driver.find_element_by_id("nsubmit").click()