写点什么

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

作者:测试人
  • 2024-05-27
    北京
  • 本文字数:3508 字

    阅读完需:约 12 分钟

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

ActionChains 解析

  • 实例化类 ActionChains,参数为 driver 实例。

  • 中间可以有多个操作。

  • .perform()代表确定执行。

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

键盘事件

  • 按下(key_down)、释放(key_up)键盘键位

  • 结合 send_keys 回车(send_keys(Keys.ENTER))

  • 官方接口手册:

https://www.selenium.dev/documentation/webdriver/actions_api/keyboard/#tabs-1-1

  • 官方接口手册:

https://www.selenium.dev/documentation/webdriver/actions_api

使用场景和对应事件

  • 键盘事件: 使用 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 的复制按钮为 COMMANDwindows 的复制按钮为 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)
复制代码

鼠标事件

  • 双击

  • 拖动元素

  • 指定位置(悬浮)

  • 官方接口手册:

https://www.selenium.dev/documentation/webdriver/actions_api/mouse/

鼠标事件-双击

  • 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 之后

  • 接口文档:

    https://www.selenium.dev/documentation/webdriver/actions_api/wheel/#tabs-3-1

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)
复制代码

软件测试开发免费视频教程分享


发布于: 刚刚阅读数: 4
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试学习笔记丨Selenium 高级控件交互方法_软件测试_测试人_InfoQ写作社区