自动化测试——高级控件交互方法

在这里插入图片描述


一、ActionChains

ActionChains模拟鼠标操作的常用方法。使用click()方法可以进行鼠标的单击操作,但是鼠标操作还包括:双击、右击、悬停、鼠标拖动等功能,所以,ActionChains类提供了鼠标的常用方法

1、导入

from selenium.webdriver.common.action_chains import ActionChains

2、perform()方法

当你调用ActionChains中的其他方法时(如:chick(),send_keys()等),是不会立即执行的,而是会将所有的操作按顺序存放在一个队列里,只有当你调用perform()方法时,队列中的时间会依次执行。
所以,在任意的操作链结束之后都要调用 perform()方法

3、用法

action=ActionChains(driver)
action.多个操作
action.perform()

二、键盘事件

1、按下shift键

1、访问百度网站
2、点击搜索按钮
3、输入搜索的内容,输入的同时按着shift键

key_down():表示按下某个按键
perform():表示执行操作

1、定位输入框:
ele = self.driver.find_element(By.ID, ‘kw’)
2、初始化ActionChains对象
action=ActionChains(self.driver)
3、按下shift键并且传入元素,输入参数
action.key_down(Keys.SHIFT,ele).
send_keys(‘selenium’).
perform()

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys


class TestKeyboard:

    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    def test_swift(self):
        """
        1、访问百度网站
        2、点击搜索按钮
        3、输入搜索的内容,输入的同时按着shift键
        :return:
        """
        self.driver.get('https://www.baidu.com/')
        self.driver.find_element(By.CSS_SELECTOR,".bg.s_btn").click()
        # 目标元素即为输入框
        ele = self.driver.find_element(By.ID, 'kw')

        action=ActionChains(self.driver)
        #key_down()表示按下某个按键
        #输入内容
        #perform()执行操作
        action.key_down(Keys.SHIFT,ele).\
            send_keys('selenium').\
            perform()

        time.sleep(3)

2、输入回车

第一种回车方式:

self.driver.find_element(By.ID, ‘kw’).send_keys(Keys.ENTER)

第二种回车方式:

ActionChains(self.driver).key_down(Keys.ENTER).perform()

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys


class TestKeyboard:

    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    def test_enter(self):
        self.driver.get('https://www.baidu.com/')
        self.driver.find_element(By.ID, 'kw').send_keys('python')
        #第一种回车方式
        #self.driver.find_element(By.ID, 'kw').send_keys(Keys.ENTER)
        #第二种回车方式
        ActionChains(self.driver).key_down(Keys.ENTER).perform()*
        time.sleep(3)

3、复制粘贴

import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys


class TestKeyboard:

    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()


    def test_copy_and_paste(self):
        self.driver.get('https://www.baidu.com/')
        self.driver.find_element(By.CSS_SELECTOR, ".bg.s_btn").click()
        # 目标元素即为输入框
        ele = self.driver.find_element(By.ID, 'kw')

        #判断操作系统是否为mac,如果是则返回command键位,如果是windows返回control键位
        command_contral=Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL

        action = ActionChains(self.driver)
        # key_down()表示按下某个按键
        # 输入内容
        # perform()执行操作
        action.key_down(Keys.SHIFT, ele). \
            send_keys('selenium!').\
            key_down(Keys.ARROW_LEFT).\
            key_down(command_contral).\
            send_keys("xvv").\
            key_up(command_contral).\
            perform()

        time.sleep(3)

三、鼠标事件

1、双击double_click()

ActionChains(self.driver).double_click(ele).perform()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/2/22 23:43
# @Author  : 杜兰特
# @File    : test_mouse.py
import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

class TestMouse:

    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    def test_double_click(self):
        self.driver.get('https://vip.ceshiren.com/#/ui_study/frame')
        #self.driver.find_element(By.ID,'primary_btn').click()
        ele=self.driver.find_element(By.ID,'primary_btn')
        ActionChains(self.driver).double_click(ele).perform()
        time.sleep(3)

2、拖拽

ActionChains(self.driver).drag_and_drop(ele1,ele2).perform()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/2/22 23:43
# @Author  : 杜兰特
# @File    : test_mouse.py
import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

class TestMouse:

    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    def test_drag_and_drop(self):
        self.driver.get('https://vip.ceshiren.com/#/ui_study/action_chains')
        #获取起始元素的位置
        ele1=self.driver.find_element(By.ID,'item1')
        #获取目标元素的位置
        ele2=self.driver.find_element(By.ID,'item3')
        ActionChains(self.driver).drag_and_drop(ele1,ele2).perform()
        time.sleep(3)

3、悬浮

ActionChains(self.driver).move_to_element(ele).perform()

问题:当鼠标挪开后,下拉字段页面不展示,不方便调试;
解决:按住ctrl+shift+c调试

在这里插入图片描述

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/2/22 23:43
# @Author  : 杜兰特
# @File    : test_mouse.py
import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

class TestMouse:

    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    def test_move_to_element(self):
        self.driver.get('https://vip.ceshiren.com/#/ui_study/action_chains2')
        ele=self.driver.find_element(By.CSS_SELECTOR,'.title')
        ActionChains(self.driver).move_to_element(ele).perform()
        time.sleep(2)
        self.driver.find_element(By.XPATH,'//div[contains(text(),"测开班")]').click()
        time.sleep(3)

4、滚轮滚动操作

根据位置定位:

ActionChains(self.driver).scroll_to_element(ele).perform()

根据坐标定位:

ActionChains(self.driver).scroll_by_amount(0,3000).perform()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/2/22 23:43
# @Author  : 杜兰特
# @File    : test_mouse.py
import sys
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

class TestMouse:

    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.driver.implicitly_wait(3)

    def teardown(self):
        self.driver.quit()

    #根据位置定位
    def test_scroll_to_element(self):
        self.driver.get('https://blog.csdn.net/YZL40514131?type=blog')
        ele=self.driver.find_element(By.XPATH,'//h4[contains(text(),"自定义Mixin方法")]')
        ActionChains(self.driver).scroll_to_element(ele).perform()
        time.sleep(10)

    #根据坐标定位
    def test_scroll_to_xy(self):
        self.driver.get('https://blog.csdn.net/YZL40514131?type=blog')
        ActionChains(self.driver).scroll_by_amount(0,3000).perform()
        time.sleep(10)


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值