zoukankan      html  css  js  c++  java
  • Python3+Selenium3自动化测试-(四)

    之前的文章中,针对元素的各种属性,进行了相对应的操作,接下来可以看看selenium如何模拟操作键盘和鼠标。

    键盘事件

    webdriver可以模拟常规键盘上所有的按键操作,在导入包的源码中可以看到所有命令对应的按键。

    以代码的形式来展示:

    # coding=utf-8
    
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    
    # 键盘事件
    driver.find_element(By.ID, 'kw').send_keys("selenium&python?")
    time.sleep(3)
    driver.find_element(By.ID, 'kw').send_keys(Keys.BACK_SPACE)  # 利用backspace键删除字符串最后一位
    time.sleep(3)
    driver.find_element(By.ID, 'kw').send_keys(Keys.SPACE)  # 在字符串后空格键添加空格
    driver.find_element(By.ID, 'kw').send_keys("学习")  # 继续在字符串后面添加字符串
    driver.find_element(By.ID, 'kw').send_keys(Keys.ENTER)  # 输入回车enter键进行搜索
    time.sleep(3)
    
    driver.find_element(By.ID, 'kw').send_keys(Keys.CONTROL, 'a')  # 全选搜索框中的内容
    driver.find_element(By.ID, 'kw').send_keys(Keys.CONTROL, 'x')  # 剪切搜索框中的内容,也可以使用c进行复制
    time.sleep(3)
    
    # 打开另外一个搜索网站,输入刚刚剪切的内容
    driver.get("https://www.google.com")
    driver.find_element(By.ID, 'lst-ib').send_keys(Keys.CONTROL,
                                                   'v')  # 粘贴刚刚复制、剪切的内容
    driver.find_element(By.ID, 'lst-ib').submit()  # 提交搜索
    
    time.sleep(3)
    """
    send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
    
    send_keys(Keys.SPACE) 空格键(Space)
    
    send_keys(Keys.TAB) 制表键(Tab)
    
    send_keys(Keys.ESCAPE) 回退键(Esc)
    
    send_keys(Keys.ENTER) 回车键(Enter)
    
    send_keys(Keys.CONTROL, ‘a’) 全选(Ctrl+A)
    
    send_keys(Keys.CONTROL, ‘c’) 复制(Ctrl+C)
    
    send_keys(Keys.CONTROL, ‘x’) 剪切(Ctrl+X)
    
    send_keys(Keys.CONTROL, ‘v’) 粘贴(Ctrl+V)
    
    send_keys(Keys.F1) 键盘 F1
    ...
    send_keys(Keys.F12) 键盘 F12
    """
    driver.quit()

    鼠标事件

    上面的键盘事件比较好理解,鼠标事件的话直接看源代码或许就有些纠结了,但是源代码的注释说明其实对ActionChains说明的比较清楚。

    ActionChains是一种自动执行低级别交互的方法,例如鼠标移动,鼠标按钮操作,按键和上下文菜单交互。这对于执行更复杂的操作非常有用,例如悬停和拖放。

    用户操作。
           在ActionChains对象上调用操作方法时,操作将存储在ActionChains对象的队列中。
           当调用perform()时,事件将按它们排队的顺序触发。

     ActionChains可以用于链式或者可以将操作逐个排队,然后执行。

    无论哪种方式,动作都按照它们被调用的顺序执行,一个在另一个之后执行。

    这里还是以代码展示部分功能吧:

    # coding=utf-8
    
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    
    driver = webdriver.Chrome()
    
    driver.get("https://www.baidu.com")
    time.sleep(3)
    
    # 定位元素
    ele_1 = driver.find_element(By.XPATH, '//*[@id="u1"]/a[9]')
    ele_2 = driver.find_element(By.XPATH, '//*[@id="u1"]/a[8]')
    
    # 将鼠标悬停在元素1上3秒后再次悬停到元素2上
    ActionChains(driver).move_to_element(ele_1).perform()
    time.sleep(3)
    ActionChains(driver).move_to_element(ele_2).perform()
    time.sleep(3)
    
    driver.quit()

    上述代码实现了在元素上进行悬停,再移动至另一元素上。

    还有其他操作如下:

     1 """
     2 click(on_element=None) ——单击鼠标左键
     3 
     4 click_and_hold(on_element=None) ——点击鼠标左键,不松开
     5 
     6 context_click(on_element=None) ——点击鼠标右键
     7 
     8 double_click(on_element=None) ——双击鼠标左键
     9 
    10 drag_and_drop(source, target) ——拖拽到某个元素然后松开
    11 
    12 drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
    13 
    14 key_down(value, element=None) ——按下某个键盘上的键
    15 
    16 key_up(value, element=None) ——松开某个键
    17 
    18 move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
    19 
    20 move_to_element(to_element) ——鼠标移动到某个元素
    21 
    22 move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
    23 
    24 perform() ——执行链中的所有动作
    25 
    26 release(on_element=None) ——在某个元素位置松开鼠标左键
    27 
    28 send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
    29 
    30 send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
    31 """

     通过这些键盘和鼠标的操作,就可以做更多了

  • 相关阅读:
    Apache Pig使用MongoLoader产生大量空文件问题
    执行sparksql出现OOM问题
    [TD笔记]Teradata XML
    Redhat上离线/非root安装python库
    Java 多线程同步关键字synchronized各种用法/特性 总结
    CVE-2019-0708 微软远程桌面服务远程代码执行漏洞分析之补丁分析
    Spring Security 实战(使用Spring Boot项目演示)
    一些渗透中,或者扫描的nmap nse脚本推荐
    kali学习笔记(一):虚拟机安装好kali后应进行的配置
    Spring boot相关问题
  • 原文地址:https://www.cnblogs.com/lvzb86/p/9321929.html
Copyright © 2011-2022 走看看