Python web自动化(⿏标键盘模拟操作)

1.Web 元素交互

        五种常⽤的操作


       1. 点击 (适⽤于任何元素)

        

driver.find_element(By.XPATH, "//*[@id='btnSearch']").click() # 点击登陆按钮

        2发送键位 (仅适⽤于⽂本字段和内容可编辑元素)

        

driver.find_element(By.XPATH, "//input[@name='searchKey']").send_keys("⼤王"+ Keys.ENTER)

我们使用send_keys输入内容,再然后通过Key.(键盘上的值)来模拟按键

         3清除 (仅适⽤于⽂本字段和内容可编辑元素)

        

el = driver.find_element(By.XPATH, "//input[@name='searchKey']")
el.send_keys("⼤王")
sleep(3)
el.clear()

        

       2.使⽤选择列表元素

                导入相关的模块

                

from selenium.webdriver.support.select import Select

        

# 创建一个select对象

select_element=driver.find_element(By.NAME,"singleSelect")
select_object=Select(select_element)

我们有如下的网页

        

有三种方法选择元素的方法

        1)根据索引进⾏选择:

        

select_object.select_by_index(2)

        2)通过value值进⾏选择:

        

        

# 2.根据value的值
select_object.select_by_value("option2")

        3.通过元素的⽂本内容进⾏选择:

# 3通过元素的⽂本内容进⾏选择:
select_object.select_by_visible_text("选项1")

获取所有可选择的选项(all_selected_options):

        

# 获取已选择的选项
selected_option=select_object.all_selected_options
print("获取已选择的选项:"+selected_option)

获取可选择项的第⼀个(first_selected_option):

first_selected_option = select_object.first_selected_option

多选

""""""

import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()

# 打开项目的url
"""
打开本地化文件`
"""
driver.get("http://localhost:63342/Webtest0524/day4/02%20%E9%80%89%E6%8B%A9%E5%88%97%E8%A1%A8%E5%85%83%E7%B4%A0/%E4%B8%8B%E6%8B%89%E6%A1%86%E7%A4%BA%E4%BE%8B.html?_ijt=sv6udc44f2m0qa7ce4l5q0bjil&_ij_reload=RELOAD_ON_SAVE")

# 触发多选下拉框
driver.find_element(By.XPATH, "//button").click()

# 创建一个多选select对象
select_element = driver.find_element(By.ID, "multiSelect")
selct_object = Select(select_element)

# 确定是否允许多选
check_selects = selct_object.is_multiple
print("是否允许多选: ", check_selects)

# 根据索引
selct_object.select_by_index(3)

# 根据value的值
selct_object.select_by_value('option3')

# 根据文本
selct_object.select_by_visible_text('选项2')

"""
其他操作
"""

# 获取已选择的选项
selected_option = selct_object.all_selected_options
print("获取已选择的选项: ", selected_option)
print(f"已经选择了 {len(selected_option)} 个选项")

# 获取所有可选择的选项
return_all_selects = selct_object.options
print("获取所有可选择的选项: ", return_all_selects)
print(f"总共有 {len(return_all_selects)} 个选项")

# 获取第一个被选择的选项
first_select = selct_object.first_selected_option
print("获取第一个被选择的选项: ", first_select)

# 取消所有被选择的选项
time.sleep(3)
# selct_object.deselect_all()


我们还可以进行反选,逻辑如上图代码

        
        

3.Action接⼝

        原理: selenium底层提供了很多接⼝,⽤于通过调⽤接⼝来模拟⿏标、键盘等的操作( 遵循的是W3C协议 )
        导⼊相关模块:from selenium.webdriver import ActionChains
                在使用action接口的时候,我们需要注意前置和后置:

                前置:在使⽤Actions对象时,需要传⼊初始化的浏览器对象:  

driver = webdriver.Chrome()
ActionChains(driver)

                后置:输⼊完所有的操作后,需要通过perform()进⾏提交操作:
                

ActionChains(driver).move_to_element(el).click_and_hold().send_keys("abc").perform()

                又例如:我们让qs大写,dd小写

        

# key_down(按下)
ActionChains(driver).click(el).key_down(Keys.SHIFT)\
    .send_keys("qs").key_up(Keys.SHIFT).send_keys("dd").perform()

释放所有Actions:

ActionBuilder(driver).clear_actions()

如果不释放的话,会默认记住上述的步骤,⽐如:前⾯按了Shift,如果不释放的话,再按其他字⺟就是⼤写,释放了则是⼩写
 

4.Keyboard actions(键盘事件)

        我们有如下例子

        

""""""

from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://120.25.127.201:18001/")


def tt_key_down():
    """验证模拟按下键位"""
    el = driver.find_element(By.ID, "searchKey")
    ActionChains(driver).click(el).key_down(Keys.SHIFT).send_keys("qs").perform()

    # 获取输入的文本信息
    text = el.get_attribute("value")
    print("获取输入的文本信息: ", text)

    assert "QS" == text
    print("tt_key_down测试用例的结果通过")


# tt_key_down()

def tt_key_up():
    """验证模拟松开键位"""
    el = driver.find_element(By.ID, "searchKey")
    ActionChains(driver).click(el).key_down(Keys.SHIFT).send_keys("qs") \
        .key_up(Keys.SHIFT).send_keys("dd") \
        .perform()

    # 获取输入的文本信息
    text = el.get_attribute("value")
    print("获取输入的文本信息: ", text)

    assert "QSdd" == text
    print("tt_key_up测试用例的结果通过")


tt_key_up()

        我们来进行验证键盘的模拟 

        

5.Mouse actions(⿏标事件)

        

1) Click and hold (点击并按住不放):
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
2) Click and release (点击然后松开):
ActionChains(driver) \
.click(clickable) \
.perform()
3) Context Click (单击右键):
ActionChains(driver) \
.context_click(clickable) \
.perform()
4) Back Click (点击后退):
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
5) Forward Click (点击前进):
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
6) Double click (双击):
ActionChains(driver) \
.double_click(clickable) \
.perform()
7) Move to element (移动到元素):
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
8) Drag and Drop on Element (在元素上拖放):
# 在源元素上单击并按住,移动到⽬标元素的位置,然后释放⿏标
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver)\
.drag_and_drop(draggable, droppable)\
.perform()

                例子如下

                

""""""
import time

from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://novel.hctestedu.com/")

el = driver.find_element(By.LINK_TEXT, "重生学霸小甜妻")

# click_and_hold(点击并按住不放)
ActionChains(driver).click_and_hold(el).perform()
time.sleep(3)

# click(点击然后松开)
ActionChains(driver).click(el).perform()
time.sleep(3)

# context_click(点击右键)
ActionChains(driver).context_click(el).perform()
time.sleep(3)

# (点击后退)
# 需要用到另一个类ActionBuilder,需要鼠标支持多功能的操作,实际的工作中是不实用的
ActionBuilder(driver).pointer_action.pointer_down(MouseButton.BACK)
ActionBuilder(driver).pointer_action.pointer_up(MouseButton.BACK)
ActionBuilder(driver).perform()

# 实际的工作中用driver.back()进行浏览器回退
driver.back()

# double_click(双击)
ActionChains(driver).double_click(el).perform()

# move_to_element(移动到元素)
time.sleep(2)
move_el = driver.find_element(By.LINK_TEXT, "百度")
ActionChains(driver).move_to_element(move_el).perform()

# drag_and_drop(在元素上拖放)
# 只有支持拖放的这个功能才可以使用
# 起点元素、终点元素
ActionChains(driver).drag_and_drop('起点元素', '终点元素').perform()

6.滚轮

常⻅的5种使⽤⽅法:\

        1) Scroll to element 滚动到元素:    

driver = webdriver.Chrome()

driver.get("http://120.25.127.201:18001/")

el = driver.find_element(By.LINK_TEXT, "百度")

# scroll_to_element(滚动到元素)
# ActionChains(driver).scroll_to_element(el).perform()
ActionChains(driver).scroll_from_origin(el).perform()


        2) Scroll by given amount 按给定数值滚动:

        

# scroll_by_amount(按照指定的坐标数值进行滑动[x坐标(正右负左),y坐标(正下负上)])
ActionChains(driver).scroll_by_amount(0, 1000).perform()


        3) Scroll from an element by a given amount 基于元素按给定数值滚动:

                我们这个方法是移动元素内部的滑动条

                


# scroll_from_origin(基于元素按照给定的坐标进行定位)
driver.get("E:\Python\pythonProjects\Webtest0524\day4\\05 滚轮\元素内滑动示例.html")

# 先定位可以滑动的元素
el = driver.find_element(By.CLASS_NAME, "scrollable-content")

# 目标元素
target_element = driver.find_element(By.XPATH, "//div[@class='scrollable-content']/p[16]")

# 1.生成一个坐标对象
coordinates_el = ScrollOrigin.from_element(target_element)
print("coordinates_el: ", coordinates_el)

# 2.获取元素里面的x、y坐标
el_x = target_element.rect['x']
print("元素的X坐标: ", el_x)
el_y = int(target_element.rect['y'])
print("元素的Y坐标: ", el_y)

# 3.滑动元素
ActionChains(driver).scroll_from_origin(coordinates_el, el_x, el_y).perform()


 

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值