首页 > 其他分享 >17.高级控件交互方法

17.高级控件交互方法

时间:2023-12-29 12:33:19浏览次数:43  
标签:控件 17 ActionChains self driver element 交互 class def

使用场景

 
使用场景对应事件
复制粘贴 键盘事件
拖动元素到某个位置 鼠标事件
鼠标悬停 鼠标事件
滚动到某个元素 滚动事件
使用触控笔点击 触控笔事件(了解即可)

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

ActionChains解析

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

键盘事件

  • 按下、释放键盘键位
  • 结合send_keys回车

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

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

 
  • ActionChains(self.driver): 实例化ActionChains类
  • key_down(Keys.SHIFT, ele): 按下shift键实现大写
  • send_keys("selenium"): 输入大写的selenium
  • perform(): 确认执行
class TestKeyBoardDemo:

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

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

    def test_key_down_up(self):
        # 演练环境
        self.driver.get("https://ceshiren.com/")
        self.driver.find_element(By.ID, "search-button").click()
        ele = self.driver.find_element(By.ID, "search-term")
        ActionChains(self.driver).key_down(Keys.SHIFT, ele).\
        send_keys("selenium").perform()

键盘事件-输入后回车

 
  • 直接输入回车: 元素.send_keys(Keys.ENTER)
  • 使用ActionChains: key_down(Keys.ENTER)
class TestKeyBoardDemo:

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

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

    def test_enter(self):
        # 演练环境
        self.driver.get("https://www.sogou.com/")
        ele = self.driver.find_element(By.ID, "query")
        ele.send_keys("selenium")
        # 第一种方式
        ele.send_keys(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")
class TestKeyBoardDemo:
    # driver 初始化
    def setup_class(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)
    # 关闭driver进程
    def teardown_class(self):
        self.driver.quit()
    # 复制粘贴逻辑
    def test_copy_and_paste(self):
        # 演练环境
        self.driver.get("https://ceshiren.com/")
        cmd_ctrl = Keys.COMMAND if sys.platform == 'darwin' else Keys.CONTROL
        self.driver.find_element(By.ID, "search-button").click()
        ele = self.driver.find_element(By.ID, "search-term")
        # 打开搜索,选择搜索框,输入selenium,剪切后复制,几个v就代表复制几次
        ActionChains(self.driver)\
            .key_down(Keys.SHIFT, ele)\
            .send_keys("Selenium!")\
            .send_keys(Keys.ARROW_LEFT)\
            .key_down(cmd_ctrl)\
            .send_keys("xvvvvv")\
            .key_up(cmd_ctrl)\
            .perform()
        time.sleep(5)

鼠标事件

 
  • 双击
  • 拖动元素
  • 指定位置(悬浮)

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

鼠标事件-双击

 
  • double_click(元素对象): 双击元素
class TestMouseDemo:

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

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

    def test_double_click(self):
        # 演练环境
        self.driver.get("https://vip.ceshiren.com/#/ui_study")
        ele = self.driver.find_element(By.ID, "primary_btn")
        ActionChains(self.driver).double_click(ele).perform()
        time.sleep(2)

鼠标事件-拖动元素

 
  • drag_and_drop(起始元素对象, 结束元素对象): 拖动并放开元素
class TestMouseDemo:

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

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

    def test_drag_and_drop(self):
        # 演练环境
        self.driver.get("https://vip.ceshiren.com/#/ui_study/action_chains")
        item_left = self.driver.find_element(By.CSS_SELECTOR,'#item1')
        item_right = self.driver.find_element(By.CSS_SELECTOR,'#item3')
        ActionChains(self.driver).drag_and_drop(item_left, item_right).perform()
        time.sleep(5)

鼠标事件-悬浮

 
  • move_to_element(元素对象): 移动到某个元素
class TestMouseDemo:

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

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

    def test_hover(self):
        # 演练环境
        self.driver.get("https://vip.ceshiren.com/#/ui_study/action_chains2")
        time.sleep(2)
        title = self.driver.find_element(By.CSS_SELECTOR, '.title')
        ActionChains(self.driver).move_to_element(title).perform()
        options = self.driver.find_element(By.CSS_SELECTOR,'.options>div:nth-child(1)')
        ActionChains(self.driver).click(options).perform()
        time.sleep(5)

滚轮/滚动操作

 
  • 滚动到元素
  • 根据坐标滚动
  • 注意: selenium 版本需要在 4.2 之后

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

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

 
  • scroll_to_element(WebElement对象):滚动到某个元素
class TestScrollDemo:

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

    def teardown_class(self):
        self.driver.quit()
    
    def test_scoll_to_element(self):
        # 演练环境  
        self.driver.get("https://ceshiren.com/")
        # 4.2 之后才提供这个方法
        ele = self.driver.find_element\
        (By.XPATH, "//*[text()='怎么写高可用集群部署的测试方案?']")
        ActionChains(self.driver).scroll_to_element(ele).perform()
        time.sleep(5)

滚轮/滚动操作-根据坐标滚动

 
  • scroll_by_amount(横坐标, 纵坐标)
class TestScrollDemo:

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

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

    def test_scroll_to_amount(self):
        # 演练环境
        self.driver.get("https://ceshiren.com/")
        # 4.2 之后才提供这个方法
        ActionChains(self.driver).scroll_by_amount(0, 10000).perform()
        time.sleep(5)

标签:控件,17,ActionChains,self,driver,element,交互,class,def
From: https://www.cnblogs.com/csfsz/p/17934630.html

相关文章

  • CF1917F Construct Tree 题解
    题目链接:https://codeforces.com/contest/1917/problem/F题意有\(n\)条长度\(l_i\)的边,问它们是否能组成一棵\(n+1\)个节点的树,使得树的直径长度为\(d\)。\(n,d\le2000\)。题解首先当然要存在一个边集\(D\),使得\(\sum\limits_{i\inD}l_i=d\),这可以使用背包......
  • Ubuntu 20.04 安装Odoo17
    1、升级系统sudoapt-getupdate2、更新系统sudoapt-getupgrade3、查看系统Python3版本python3-V4、更新Python3.8到3.10sudoadd-apt-repositoryppa:deadsnakes/ppasudoapt-getupdate安装Python3.10sudoapt-getinstallpython3.10-y安装完成后,检查新版......
  • Luminar Neo 1.17.0 (macOS, Windows) - 创新 AI 图像编辑器
    LuminarNeo1.17.0(macOS,Windows)-创新AI图像编辑器作者主页:sysin.org你想象中的照片LuminarNeo让您能够表达所见之美什么是LuminarNeo?您是否曾经想通过图像获得更多成就?LuminarNeo是一款创新的图像编辑器,由未来的AI技术提供支持,可简化复杂的编辑程序并使创作者能......
  • WPF自定义控件之ItemsControl鱼眼效果
    原理先获取鼠标在控件中的坐标,在获取其每一项相对于ItemsControl的坐标,然后计算每一项离当前鼠标的距离,在根据这个距离,对其每一项进行适当的缩放实现创建一个类,命名为FishEyeItemsControl publicclassFishEyeItemsControl:ItemsControl 添加应用鱼眼效果方法(控制其控件......
  • Codeforces Round 917 (Div. 2)
    A.LeastProduct存在\(a[i]=0\),\(min=0\),不需要任何操作。负数个数为偶数(包括0),\(min=0\),把任意一个改为\(0\)。负数个数为奇数,\(min=\proda[i]\),不需要任何操作。voidsolve(){ intn; cin>>n; vector<int>b,c,d; for(inti=0;i<n;++i){ in......
  • 痞子衡嵌入式:简析i.MXRT1170 MECC64功能特点及其保护片内OCRAM1,2之道
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT1170MECC64功能特点及其保护片内OCRAM1,2之道。ECC是“ErrorCorrectingCode”的简写,ECC能够实现错误检查和纠正,含有ECC功能的内存一般称为ECC内存,使用了ECC内存的系统在稳定性和可靠性......
  • openGauss学习笔记-176 openGauss 数据库运维-实例主备切换
    openGauss学习笔记-176openGauss数据库运维-实例主备切换176.1操作场景openGauss在运行过程中,数据库管理员可能需要手工对数据库节点做主备切换。例如发现数据库节点主备failover后需要恢复原有的主备角色,或怀疑硬件故障需要手动进行主备切换。级联备机不能直接转换为主机,只能......
  • SwiftUI 中Webview与JS交互
    iOS中WKWebview原生与网页端JS交互常用的方法是首先在webview中注入标定好的方法名,例如标定一个request方法letconfig=WKWebViewConfiguration()letuserContent=WKUserContentController();  vardealMessage=DealMessage()userContent.add(dealMessage,name:......
  • 17. 分割类控件
    一、分割类控件  分割类控件主要对窗口中进行功能划分,使窗口看起来更加合理,美观。PySide中提供了分割线和弹簧两种类型的分割类控件。  我们可以在终端中使用pip安装pyside模块。pipinstallpyside6二、分割线  PySide提供两个分割线控件,分别是水平分割线(Horiz......
  • Ubuntu22安装graalvm JDK17+Tomcat9设置自启动
    graalvmJdk17安装参考 https://blog.csdn.net/weixin_46551671/article/details/134264889 Tomcat安装下载地址https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz安装下载安装包,将安装包上传到/usr/local/目录下执行以下命令tar......