前言
? ? ? ?在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) #点击确认
总结
先记录到此把,之后有拓展,再做扩展。
日常鸡汤:厉害的人都还在努力,不够聪明的人必须要更加的努力,才能有可能达成别人的成就,所以别放弃,一定要坚持,活到老 学到老,这句话一直很有道理。
|