软件测试学习笔记丨Selenium 高级控件交互方法

88 阅读6分钟

本文转自测试人社区,原文链接:ceshiren.com/t/topic/316…

ActionChains解析

  • 实例化类ActionChains,参数为driver实例。
  • 中间可以有多个操作。
  • .perform()代表确定执行。

ActionChains(self.driver).操作.perform()

键盘事件

使用场景和对应事件

  • 键盘事件: 使用shift实现大小写(Keys.SHIFT)
  • 键盘事件: 输入后回车(Keys.ENTER)
  • 键盘事件: 复制粘贴(Keys.CONTROL.sendkeys(“xvvv”.))
  • 鼠标事件: 双击(double_click(ele))
  • 鼠标事件: 拖动元素(drag_and_drop(ele))
  • 鼠标事件: 指定位置(例: 悬浮在下拉框的小三角位置处)(move_to_element(ele))
  • 鼠标事件: 滚轮/滚动操作-滚动到元素(scroll_to_element(ele)、scroll_by_amount(x,y))

键盘事件-使用shift实现大写

  • ActionChains(self.driver): 实例化ActionChains类
  • key_down(Keys.SHIFT, ele): 按下shift键实现大写
  • send_keys(“selenium”): 输入大写的selenium
  • perform(): 确认执行
def test_shift(self):
            """
            # 键盘事件: 使用shift实现大小写

            1、访问 https://ceshiren.com/
            2、点击搜索按钮
            3、输入搜索的内容,输入的同时按着shift键
            :return:
            """
            self.driver.get("https://ceshiren.com/")
            self.driver.find_element(By.CSS_SELECTOR, "#search-button").click()
            # 目标元素即为输入框
            ele = self.driver.find_element(By.ID,"search-term")
            # key_down 代表按下某个键位, Keys.SHIFT表示按shift键, ele表示目标元素
            # sendkeys 表示输入内容
            # perform 表示执行此链式操作
            ActionChains(self.driver)\
                .key_down(Keys.SHIFT, ele)\
                .send_keys("selenium")\
                .perform()
            time.sleep(3)

键盘事件-输入后回车

  • 直接输入回车: 元素.send_keys(Keys.ENTER)
  • 使用ActionChains: key_down(Keys.ENTER)
def test_enter_send_keys(self):
            """
            # 键盘事件: 输入后回车
            :return:
            """
            self.driver.get("https://www.sogou.com/")
            self.driver.find_element(By.ID, "query").send_keys("霍格沃兹测试开发")
        # 第一种回车方式: 定位元素.send_keys(Keys.ENTER)
        self.driver.find_element(By.ID, "query").send_keys(Keys.ENTER)
        time.sleep(3)

        # 第二种回车方式:使用ActiChains: key_down(Keys.ENTER)
        ActionChains(self.driver).key_down(Keys.ENTER).perform()
        time.sleep(3)

键盘事件-复制粘贴

  • 多系统兼容

    • mac 的复制按钮为 COMMAND

    • windows 的复制按钮为 CONTROL

  • 左箭头:Keys.ARROW_LEFT

  • 按下COMMAND或者CONTROL: key_down(cmd_ctrl)

  • 按下剪切与粘贴按钮: send_keys("xvvvvv")

def test_copy_and_paste(self):
        """
        # 键盘事件: 复制粘贴
        1、访问 https://ceshiren.com/
        2、点击搜索按钮
        3、输入搜索的内容,同时按住ctrl键 + shift键 + 左方向键,实现选中光标左边的第一个字符
        4、按住 ctrl键 + c键,实现复制选中的内容, 按住v键,实现粘贴复制的内容
        :return:
        """
        self.driver.get("https://ceshiren.com/")
        self.driver.find_element(By.CSS_SELECTOR, "#search-button").click()
        # 目标元素即为输入框
        ele = self.driver.find_element(By.ID, "search-term")
        # 先根据操作系统的类型判断复制功能的键盘事件选哪种:mac(darwin)操作系统, 使用Keys.COMMAND; windos操作系统使用Keys.CONTROL
        command_control = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL
        # key_down 代表按下某个键位, Keys.SHIFT表示按shift键, ele表示目标元素
        # sendkeys 表示输入内容
        # Keys.ARROW_LEFT 表示按左方向键,出现几个Keys.ARROW_LEFT,表示光标向左移动几个键位
        # command_control 表示Keys.CONTROL, Ctrl键
        # send_keys("xvvv")  表示x键按一下,v键按三下(即表示剪切一次,粘贴三次)
        # key_up(command_control) 表示松开Ctrl键
        ActionChains(self.driver)\
            .key_down(Keys.SHIFT, ele)\
            .send_keys("selenium")\
            .key_down(Keys.ARROW_LEFT)\
            .key_down(Keys.ARROW_LEFT)\
            .key_down(command_control).send_keys("xvvv").key_up(command_control)\
            .perform()
        time.sleep(3)

鼠标事件

鼠标事件-双击

  • double_click(元素对象): 双击元素
def test_double_click(self):
        """
        # 鼠标事件: 双击
        1、访问 https://vip.ceshiren.com/#/ui_study/frame;
        2、定位到 “点击两次响应”的元素,并赋值给一个元素对象ele;
        3、通过ActionChains实现双击
        :return:
        """
        self.driver.get("https://vip.ceshiren.com/#/ui_study/frame")
        ele = self.driver.find_element(By.ID, "primary_btn")
        ActionChains(self.driver).double_click(ele).perform()
        time.sleep(3)

鼠标事件-拖动元素

  • drag_and_drop(起始元素对象, 结束元素对象): 拖动并放开元素
def test_drag_and_drop(self):
        """
        # 鼠标事件: 拖动元素
        1、访问 https://vip.ceshiren.com/#/ui_study/action_chains;
        2、获取起始元素位置
        3、获取目标元素位置
        4、通过ActiChains实现拖拽操作
        :return:
        """
        self.driver.get("https://vip.ceshiren.com/#/ui_study/action_chains")
        start_ele = self.driver.find_element(By.ID, "item1")
        target_ele = self.driver.find_element(By.ID, "item3")
        ActionChains(self.driver).drag_and_drop(start_ele, target_ele).perform()
        time.sleep(3)

鼠标事件-悬浮

  • move_to_element(元素对象): 移动到某个元素
def test_move_to_element(self):
        """
        # 鼠标事件: 把光标移动到指定位置(例: 悬浮在下拉框的小三角位置处)
        1、访问 https://vip.ceshiren.com/#/ui_study/action_chains2;
        2、定位到目标元素
        3、通过ActionChains实现将光标移动到指定位置的操作
        :return:
        """
        self.driver.get("https://vip.ceshiren.com/#/ui_study/action_chains2")
        ele = self.driver.find_element(By.CLASS_NAME, "menu")
        ActionChains(self.driver).move_to_element(ele).perform()
        time.sleep(3)
        self.driver.find_element(By.XPATH, "//*[contains(text(), '测开班')]").click()
        time.sleep(3)

滚轮/滚动操作-滚动到元素

  • 滚动到元素
  • scroll_to_element(WebElement对象):滚动到某个元素
  • 根据坐标滚动
  • 滚轮/滚动操作-根据坐标滚动
    scroll_by_amount(横坐标, 纵坐标)
  • 注意: selenium 版本需要在 4.2 之后
  • 接口文档:
    www.selenium.dev/documentati…
def test_scroll_to_element(self):
        """
        # 鼠标事件: 滚轮/滚动操作-滚动到元素
        1、访问 https://ceshiren.com/;
        2、定位到目标元素
        3、通过ActionChains实现通过鼠标滚轮滚动到目标元素位置
        :return:
        """
        self.driver.get("https://ceshiren.com/")
        ele = self.driver.find_element(By.XPATH, "//*[@id='ember47']/td[1]/span/a")
        # 第一种方式:通过scroll_to_element(ele)实现
        ActionChains(self.driver).scroll_to_element(ele).perform()
        # 第二种方式:通过scroll_by_amount(ele)实现
        ActionChains(self.driver).scroll_by_amount(0, 3000).perform()
        time.sleep(10)

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

【霍格沃兹测试开发】6 小时轻松上手功能测试/ 软件测试工作流程/ 测试用例设计/Bug 管理

【霍格沃兹测试开发】零基础小白如何使用Postman ,从零到一做接口自动化测试/ 从零基础到进阶到实战

【霍格沃兹测试开发】建议收藏全国CCF 测试开发大赛Python 接口自动化测试赛前辅导 / 项目实战