一、前言
二、Selenium 4 的鼠标操作
.perform()
去实行操作内容,我们可以通过这样调用:
#创建动作链实例
chains = ActionChains(driver)
#需要操作的元素
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
#执行动作链
chains .move_to_element(menu).click(hidden_submenu).perform()
#创建动作链实例
chains = ActionChains(driver)
#需要操作的元素
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
#执行动作链
chains .move_to_element(menu)
chains .click(hidden_submenu)
chains .perform()
.perform()
是执行对应所创建的动作链实例内所写的操作,如果有多个操作,且中间会穿插其他selenium操作的话,需要在每次执行
.perform()
操作之前,重新创建动作链实例,否则会重复执行上一个动作链操作。如:
#创建动作链实例
chains = ActionChains(driver)
#需要操作的元素
menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
#执行第一次动作链
chains .move_to_element(menu)
chains .perform()
print(driver.find_element_by_name('t2').get_attribute('value'))
driver.find_element_by_name('t2').click()
....
#重新创建动作链实例
chains = ActionChains(driver)
#执行第二次的动作链
chains .click(hidden_submenu)
chains .perform()
2.1 右键
#引入对应的动作库
from selenium.webdriver import ActionChains
#创建动作库实例
chains = ActionChains(driver)
#确认需要右键的元素
temp = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")
#实行右键点击
chains.context_click(temp).perform()
2.2 双击
#引入对应的动作库
from selenium.webdriver import ActionChains
#创建动作库实例
chains = ActionChains(driver)
#确认需要双击的元素
temp = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")
#实行右键点击
chains.double_click(temp).perform()
2.3 长按
#引入对应的动作库
from selenium.webdriver import ActionChains
#创建动作库实例
chains = ActionChains(driver)
#确认需要双击的元素
temp = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")
#实行双击
chains.click_and_hold(temp).perform()
2.4 拖动
#引入对应的动作库
from selenium.webdriver import ActionChains
#创建动作库实例
chains = ActionChains(driver)
#确认需要拖动的两个元素
d1 = driver.find_element(By.ID,"dragger")
d2 = driver.find_element(By.XPATH,"/html/body/div[2]")
#实行将d1拖动到d2
chains.drag_and_drop(d1, d2).perform()
三、实际使用案例
# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.webdriver import ActionChains
from selenium import webdriver
# 设置Chrome选项
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# 连接到已打开的Chrome浏览器
driver = webdriver.Chrome(options=chrome_options)
#创建链式实例
chains = ActionChains(driver)
video = driver.find_element(By.XPATH,"//video[@crossorigin='anonymous']")
good = driver.find_element(By.XPATH,"//div[@title='点赞(Q)']")
#实行右键点击
chains.context_click(video).perform()
#点击复制视频链接
driver.find_element(By.XPATH,"//li[@data-action='copyLink']").click()
sleep(1.0)
#更新链式实例
chains = ActionChains(driver)
#实行长按点赞操作
chains.click_and_hold(good).perform()
sleep(3.0)
chains = ActionChains(driver)
#通过双击放大视频屏幕
chains.double_click(video).perform()
chains = ActionChains(driver)
sleep(3.0)
#跳转拖拽演示网站
driver.get("https://sahitest.com/demo/dragDropMooTools.htm")
sleep(3.0)
d1 = driver.find_element(By.ID,"dragger")
d2 = driver.find_element(By.XPATH,"/html/body/div[2]")
#实行拖拽操作
chains.drag_and_drop(d1, d2).perform()
四、小结
本文分享自微信公众号 - AirtestProject(AirtestProject)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。