| 前言 ? ? ? ?在web自动化测试中,会包含一些什么操作呢,我们最常用的操作,应该是点击(?click() )、输入( send_keys() )等,这就涉及到我们的鼠标操作了,除此之外,我们的下拉框操作、键盘操作,甚至是我们的文件上传操作,又是如何实现的呢?请再往下看。 一、鼠标操作1、点击操作 (1)单纯的元素点击 ==> 可通过操作:elem.click() (2)通过链式调用(ActionChains)的方法进行点击 ; ? ? -? 元素定位 elem = driver.find_element('id','kw') ? ? -? 初始化动作链条: action = ActionChains(driver) ? ? -? 进行点击: action.click(elem).perform() from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.implicitly_wait(10)  # 隐形等待
driver.get('http://www.baidu.com')
elem = driver.find_element('id','kw') # 定位输入框
elem.send_keys('haha')
send_elem = driver.find_element(By.ID,'su')   # 定位搜索按键
# 点击操作
# 方法一:直接通过元素进行点击操作
send_elem.click()
# 方法二:通过链式调用进行点击
action = ActionChains(driver)
action.click(send_elem).perform()
 2、其他链式调用操作 元素定位  elem = driver.find_element('id','kw')  
初始化动作链条: action = ActionChains(driver)?点击操作: action.click(elem).perform()     
双击操作: action.double_click(elem).perform()
右击操作: action.context_click(elem).perform()
悬停操作: action.move_to_element(elem).perform()
拖拽操作: action.drag_and_drop(elems,elem2).perform() from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.implicitly_wait(10)  # 隐形等待
driver.get('http://www.baidu.com')
elem = driver.find_element('id','kw')  # 元素定位
action = ActionChains(driver)  # 初始化动作链条
action.click(elem).perform()   # 单击
# action.double_click(elem).perform()    # 双击
# action.context_click(elem).perform()   # 右击
# action.move_to_element(elem).perform()  # 移动,悬停
# action.drag_and_drop(elems,elem2).perform()  # 拖拽、移动(从elem1拖动到elem2)
 二、下拉框操作1、通过定位所需选中的元素,再点击click()  ==>   elem.click() from selenium import webdriver
# 下拉框操作
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(f'http://localhost:63342/PycharmProjects/NewpythonProject/04_WEB_testing/class_knowledge/%E4%B8%8B%E6%8B%89%E6%A1%86.html?_ijt=5rnvnlic1ja8r2m8kcr84a7gjl')
elem = driver.find_element('xpath','//option[@name="ly"]')
elem.click()  # 方法一,直接点击
 2、通过另一种封装,先找到select元素,再把元素传入到Select中,
   s_obj= Select(elem)     把元素传入到Select 
   s_obj.select_by_visible_text('xx')    选中text文本
   s_obj.select_by_value('xx')    通过value值传入
   s_obj.select_by_index(2)   通过索引,从0开始from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(f'http://localhost:63342/PycharmProjects/NewpythonProject/04_WEB_testing/class_knowledge/%E4%B8%8B%E6%8B%89%E6%A1%86.html?_ijt=5rnvnlic1ja8r2m8kcr84a7gjl')
s = driver.find_element('xpath','//select')
s_obj = Select(s)
# 三种方式:
s_obj.select_by_visible_text('旅游')  # 通过文本选中
s_obj.select_by_index(2)  # 通过索引获取,从0开始
s_obj.deselect_by_value('y')  # 通过option 的value属性获取,源码中option[value='y']
 三、键盘操作1、键盘基本操作 键盘操作:
elem.send_keys(Keys.CONTROL,'a')   # 键盘操作ctrl+a
elem.send_keys(Keys.CONTROL,Keys.SPACE)  # ctrl+空格 2、点击操作的四种方式 elem.send_keys(Keys.ENTER)  # 方法一,通过键盘操作回车键
elem.submit()   # 方法二:在form表单下,直接提交
elem.click()   # 方法三:直接点击操作
action = ActionChains(driver)
action.click(elem).perform()   # 方法四,通过链式调用进行提交  from selenium.webdriver import ActionChains
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
elem = driver.find_element('id','kw')
elem.send_keys('haha')
elem.send_keys(Keys.ENTER)  # 方法一,通过键盘操作回车键
elem.submit()   # 方法二:在form表单下,直接提交
elem.click()   # 方法三:直接点击操作
action = ActionChains(driver)
action.click(elem).perform()   # 方法四,通过链式调用进行提交
# 其他键盘操作
elem.send_keys(Keys.CONTROL,'a')   # 键盘操作ctrl+a
elem.send_keys(Keys.CONTROL,Keys.SPACE)  # ctrl+空格
 四、文件上传操作1、文件上传的元素为input标签 ? ?- send_keys(),发送文件路径 from selenium import webdriver
from pywinauto.keyboard import send_keys
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(r'D:\PycharmProjects\NewpythonProject\04_WEB_testing\class_knowledge\文件上传.html')
# 方法一:input标签,可直接通过sens_keys传入文件
elem = driver.find_element('name','avatar')
elem.send_keys(r'C:\Users\lalanala\Desktop\csv.csv')
time.sleep(2)
 2、非input标签,借助第三方工具 ? -??pywinauto,可做window自动化测试,pc端软件也可?? ? ? ? ? ? 安装:pip install pywinauto from selenium import webdriver
import time
from pywinauto.keyboard import send_keys  # 此为pywinauto的send_keys
from selenium.webdriver import ActionChains
from pywinauto import Desktop
# 方法一:通过系统的send_key进行文件上传
driver = webdriver.Chrome()
driver.implicitly_wait(10)   # 隐形等待
driver.get(r'D:\PycharmProjects\NewpythonProject\04_WEB_testing\class_knowledge\文件上传.html')
time.sleep(2)
elem = driver.find_element('xpath',"//input[@name='avatar']")   # 定位上传框元素
action = ActionChains(driver)    # 初始化动作链条
action.click(elem).perform()    # 点击执行
time.sleep(2)
send_keys(r'C:\Users\lalanala\Desktop\csv.csv')   # 上传文件
send_keys('{VK_RETURN}')   # 确认
# 方法二:通过调用桌面程序进行上传
elem = driver.find_element('name','avatar')
action = ActionChains(driver)
action.click(elem).perform()
time.sleep(2)
app = Desktop()
dialog = app['打开']
dialog['Edit'].type_keys(r'C:\Users\lalanala\Desktop\csv.csv')
dialog['Button'].click()
 
? - 另一种上传方式,可跨平台上传,pyautogui ? ? ? ? ? ?安装:pip install pyautogui? /? ?pip install pillow==6.2.2 import pyautogui
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(r'D:\PycharmProjects\NewpythonProject\04_WEB_testing\class_knowledge\文件上传.html')
time.sleep(1)
pyautogui.write(r'C:\Users\lalanala\Desktop\csv.csv')  # 传入文件
pyautogui.press('enter',2)    #点击确认
 
 总结先记录到此把,之后有拓展,再做扩展。 日常鸡汤:厉害的人都还在努力,不够聪明的人必须要更加的努力,才能有可能达成别人的成就,所以别放弃,一定要坚持,活到老 学到老,这句话一直很有道理。 |