• Python —— 特殊场景处理(鼠标、键盘操作&文件上传)


    1、鼠标操作

    1、概述

    使用Selenium的ActionChains类来模拟鼠标操作,导入模块如下:

    1. # 导入模块
    2. from selenium.webdriver.common.action_chains import ActionChains

    通过ActionChains对象可以发起鼠标左键、右键、移动鼠标等操作,最后使用perform方法执行操作。一些操作的方法如下所示:

    1. click() #单击
    2. click_and_hold() #在特定元素上单击鼠标左键(不释放)
    3. release() #抬起鼠标
    4. double_click() #鼠标双击
    5. move_to_element() #鼠标悬停到指定元素上
    6. context_click() #鼠标右击
    7. drag_and_drop() #拖动
    8. perform() #执行具体的操作,前面6个方法都是声明一个操作,只有调用perform()后才会真正执行操作

    一个简单的示例如下:

    1. ActionChains().click_and_hold(onElement).move_to_element(toElement).release().bu
    2. ild().perform();

    2、实战

    1. from selenium import webdriver
    2. from selenium.webdriver.common.by import By
    3. from time import sleep
    4. from selenium.webdriver.common.action_chains import ActionChains
    5. driver = webdriver.Firefox()
    6. driver.get("https://www.baidu.com/")
    7. driver.maximize_window()
    8. '''场景:在百度页面点击设置-高级搜索-在子页面更改数据'''
    9. element = driver.find_element(By.ID,"s-usersetting-top")
    10. ActionChains(driver).move_to_element(element).perform()
    11. senior = driver.find_element(By.XPATH,"//span[text()='高级搜索']")
    12. ActionChains(driver).click(senior).perform()
    13. sleep(2)
    14. notime = driver.find_element(By.XPATH,"//*[@id='adv-setting-gpc']/div/div[1]")
    15. ActionChains(driver).move_to_element(notime).perform()
    16. ActionChains(driver).click(notime).perform()
    17. sleep(2)
    18. ActionChains(driver).move_to_element(driver.find_element(By.XPATH,"//p[text()='一月内']")).perform()
    19. sleep(2)
    20. # 注意一定要使用 .perform()
    21. ActionChains(driver).click(driver.find_element(By.XPATH,"//p[text()='一月内']")).perform()
    22. sleep(5)
    23. driver.close()

    2、键盘操作

    1、概述

    Selenium中send_keys除了可以模拟键盘输入之外,还可以用它来输入键盘上的按键,甚至是组合键, 比如CTRL+A,CTRL+C,模块如下:

    from selenium.webdriver.common.keys import Keys
    

    Keys()类提供了键盘上所有按键的方法,常用的键盘按键操作如下: 

    1. send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
    2. send_keys(Keys.SPACE) #空格键(Space)
    3. send_keys(Keys.TAB) #制表键(Tab)
    4. send_keys(Keys.ESCAPE) #回退键(Esc)
    5. send_keys(Keys.ENTER) #回车键(Enter)
    6. send_keys(Keys.CONTROL,‘a’) #全选(Ctrl+A)
    7. send_keys(Keys.CONTROL,‘c’) #复制(Ctrl+C)
    8. send_keys(Keys.CONTROL,‘x’) #剪切(Ctrl+X)
    9. send_keys(Keys.CONTROL,‘v’) #粘贴(Ctrl+V)
    10. send_keys(Keys.F1) #键盘 F1
    11. ...
    12. send_keys(Keys.F12) #键盘 F12

    2、实战

    1. from selenium import webdriver
    2. from selenium.webdriver.common.by import By
    3. from time import sleep
    4. from selenium.webdriver.common.keys import Keys
    5. from selenium.webdriver.support import expected_conditions as EC
    6. from selenium.webdriver.support.wait import WebDriverWait
    7. from selenium.webdriver.support.ui import Select
    8. from selenium.webdriver.common.action_chains import ActionChains
    9. driver = webdriver.Firefox()
    10. driver.get('https://www.baidu.com')
    11. driver.maximize_window()
    12. sleep(2)
    13. driver.find_element(By.ID,'kw').send_keys('柠檬')
    14. sleep(2)
    15. # 删除一个字
    16. # driver.find_element(By.ID,'kw').send_keys(Keys.BACK_SPACE)
    17. # driver.find_element(By.ID,'kw').send_keys(Keys.BACK_SPACE)
    18. sleep(2)
    19. #组合键
    20. #全选
    21. driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'a')
    22. # #复制
    23. driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'c')
    24. # #粘贴
    25. driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬
    26. driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬
    27. sleep(6)
    28. ##剪切
    29. driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'x') #因为粘贴的是“柠檬”这2个字
    30. # print(driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'x').text) 没有这个方法
    31. # #粘贴
    32. driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬柠檬
    33. driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬柠檬柠檬
    34. sleep(5)
    35. driver.close()

    3、文件上传

    1、概述

    文件上传是自动化中比较麻烦棘手的部分。

    第一种情况

    <input type="file" id="fu" value="选择文件">

     因为上传文件会需要打开windows的文件选择窗口,而selenium是无法操作这个窗口的

    解决办法:使用send_keys写入文件的路径

    第二种情况:

    如果文件上传不是input元素,而是使用的第三方的控件。那么这种情况就很棘手了,必须要使用一些第 三方的工具,比如AutoIT来完成。参考:http://testingpai.com/article/1595507303689

    mac平台上传文件:https://www.cnblogs.com/deeptester-vv/p/15629135.html

    2、实战

    注意:auto文件的文件名要根据实际的文件名去写

    文件目录如下:

    python代码如下:

    1. import os
    2. from selenium import webdriver
    3. from selenium.webdriver.common.by import By
    4. from time import sleep
    5. driver = webdriver.Firefox()
    6. driver.get("https://www.XXXXXXXX.com/#/login")
    7. driver.maximize_window()
    8. driver.find_element(By.XPATH,"//input[@placeholder='请输入邮箱/手机号/账号']").send_keys("1234567892")
    9. driver.find_element(By.XPATH,"//input[@placeholder='请输入密码']").send_keys("jiayoujiayou666")
    10. sleep(2)
    11. driver.find_element(By.XPATH,"//span[text()='登录']").click()
    12. sleep(2)
    13. driver.find_element(By.XPATH,"//*[@id='app']/div[2]/div[2]/div/span[3]/span/img").click()
    14. driver.find_element(By.XPATH,"//li[text()='个人设置 ']").click()
    15. sleep(3)
    16. driver.find_element(By.XPATH,"//*[@id='app']/div[3]/div[1]/div[1]/span/img").click()
    17. sleep(2)
    18. driver.find_element(By.XPATH,"//span[text()='重新上传']").click()
    19. sleep(1)
    20. os.system('test4.exe E:\\python310\\web_auto\\d4_特殊场景处理\\test.jpg')
    21. sleep(2)
    22. driver.find_element(By.XPATH,"//div[@class='dialog-footer']/button[2]/span").click()
    23. sleep(5)
    24. driver.refresh()
    25. sleep(5)
    26. driver.close()

    4、下拉框的定位

    1、select标签的下拉框

    有3种方法:
    1、通过索引来选择选项。索引从0开始
    2、通过value属性来选择
    3、通过选项的文本来选择 - 也是最常用的方法

    1. from time import sleep
    2. from selenium import webdriver
    3. from selenium.webdriver.common.by import By
    4. from selenium.webdriver.support.select import Select
    5. driver= webdriver.Firefox()
    6. driver.get("file:///D:/%E6%9F%A0%E6%AA%AC%E7%8F%AD%E8%AF%BE%E7%A8%8B/web%E8%87%AA%E5%8A%A8%E5%8C%96/lemon/Python%E8%87%AA%E5%8A%A8%E5%8C%96VIP%E5%BD%95%E6%92%AD%E8%A7%86%E9%A2%91/py%E5%85%A8%E6%A0%8864%E6%9C%9F/%E5%8A%A0%E5%AF%86%E5%90%8E%E8%A7%86%E9%A2%91/%E5%BC%B9%E7%AA%97%E4%B8%8B%E6%8B%89%E6%A1%86demo.html")
    7. driver.maximize_window()
    8. '''
    9. 一、当下拉框是Select标签的时候,处理方法如下
    10. '''
    11. ele = driver.find_element(By.ID,"select")
    12. sleep(3)
    13. '''方法一:通过索引来选择选项。索引从0开始'''
    14. # Select(ele).select_by_index(3)
    15. '''方法二:通过value属性来选择'''
    16. # Select(ele).select_by_value("o4")
    17. '''方法三:通过选项的文本来选择- 最常用'''
    18. Select(ele).select_by_visible_text("浙江省")
    19. sleep(5)
    20. driver.close()

    2、一般的下拉框 

    1. '''
    2. 一、非Select标签,处理方法为:直接去点击对应下拉框
    3. 以百度页面的“设置”按钮为例
    4. '''
    5. driver.get("https://www.baidu.com/")
    6. driver.find_element(By.ID,"s-usersetting-top").click()
    7. driver.find_element(By.XPATH,"//span[text()='高级搜索']").click()
    8. driver.find_element(By.XPATH,"//span[text()='时间不限']").click()
    9. sleep(3)
    10. driver.find_element(By.XPATH,"//p[text()='一月内']").click()
    11. sleep(5)
    12. driver.close()

    完结,下次见~

  • 相关阅读:
    JMeter做http接口功能测试
    C# Windows 窗体控件中的边距和填充
    汇编语言入门(一)
    【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务
    【数据结构】冒泡排序
    Linux性能优化--使用性能工具发现问题
    quick3-hydra
    希望计算机专业同学都知道这些老师
    Qt QSS 属性 vs QObject属性
    微信小程序连接数据库与WXS的使用
  • 原文地址:https://blog.csdn.net/lzf_hlh/article/details/133811499