• Selenium常用操作之单选复选框、下拉列表、键盘、截屏、断言、(显式隐式)等待


    目录

    1. 窗口最大化

    2.单选框操作

    3. 复选框操作

    4. 下拉列表

    5. selenium 三种等待

    6. 键盘操作

    7.截屏

    8.断言

    9. Selenium操作JS弹窗控件

    10.鼠标悬停与释放


    1. 窗口最大化

    driver.maximize_window()

    2.单选框操作

    driver.find_element_by_xpath("//input[@value='berry']").click()

    3. 复选框操作

    berrCheckBox1 = driver.find_element_by_xpath('//input[@value="orange"]').click()

    4. 下拉列表

    1. driver.find_element_by_name("fruit").click()
    2. time.sleep(2)
    3. driver.find_element_by_id("watermelon").click()

    5. selenium 三种等待

    (1) 强制等待

      常用于调试

    1. import time
    2. time.sleep(2)

    (2) 隐式等待

      简介:  

      a 、 driver.implicitly_wait(10),隐式等待设置了一个时间,在一段时间内网页是否加载完成,如果完成了,就进行下一步;在设置的时间内没有完成,则会报超时加载;

      b、缺点是不智能,因为随着ajax技术的广泛应用,页面的元素往往都可以局部加载,也就是在整个页面没有加载完成的时候,可能我们需要的元素已经加载完成,那就没有必要在等待整个页面的加载,执行下一步,而隐式等待满足不了这一点;
          另外一点,隐式等待的设置时全局性的,在开头设置过后,整个的程序运行过程中都会生效,都会等待页面加载完成,不需要每次都需要设置一遍。

    1. "UTF-8">
    2. 你喜欢的水果
    3. id="p1">这是你爱吃的水果吗?



    1. from selenium import webdriver
    2. import time
    3. # 导入异常 ,
    4. # NoSuchElementException:找不到页面元素的异常
    5. # TimeoutException:时间异常,超过规定时间,抛出异常
    6. from selenium.common.exceptions import NoSuchElementException,TimeoutException
    7. # 异常的获取与处理
    8. import traceback
    9. driver = webdriver.Chrome()
    10. url = "http://www.sogou.com"
    11. driver.get(url)
    12. # 设置隐式等待
    13. driver.implicitly_wait(10)
    14. # 浏览器最大化
    15. driver.maximize_window()
    16. try:
    17. searchBox = driver.find_element_by_id("query").send_keys("selenium")
    18. click = driver.find_element_by_id("stb").click()
    19. except(NoSuchElementException,TimeoutException):
    20. traceback.print_exc()#获取异常
    21. time.sleep(2)
    22. driver.quit()

    (3) 显式等待

      简介:

      selenium中的wait模块的WebDriverWait()方法,配合until或者until_not方法,在辅助一些判断条件,就可以构成这样一个场景:每经过多少秒就查看一次locator的元素是否可见,如果可见,就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常;当然也可以判断某元素是否在规定时间内不可见等等的各种场景,需要根据自己实际的场景选择判断条件;

    1. "UTF-8">
    2. 你喜欢的水果
    3. <input>
    4. 请选择你喜欢的水果


    5. <input type="button" onclick="display_alert()" value="Display alert box" />
    6. <input id="check" type="checkbox">是否喜欢吃水果?input>


    7. <input type="text" id="text" value="今年夏天西瓜很甜!">文本框input>
    1. from selenium import webdriver
    2. import time
    3. from selenium.common.exceptions import NoSuchElementException,TimeoutException
    4. import traceback
    5. import os
    6. #显式等待要用WebDriverWait
    7. from selenium.webdriver.support.ui import WebDriverWait
    8. #判断元素是否存在 expected_conditions as EC:取别名
    9. from selenium.webdriver.support import expected_conditions as EC
    10. driver = webdriver.Chrome()
    11. url = 'file:///'+os.path.abspath("test.html")
    12. driver.get(url)
    13. try:
    14. # 显示等待
    15. wait = WebDriverWait(driver,10,0.2) #浏览器驱动,10:代表最长超时时间(秒),0.2:间隔刷新时间(不写,0.5刷新一次)
    16. wait.until(EC.title_is("你喜欢的水果")) #判断标题是否等于 "你喜欢的水果"
    17. print(u"当前网页的标题是:'你喜欢的水果'") # u utf-8 编码
    18. #显示等待的另一种写法
    19. element = WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//input[@value='Display alert box']"))
    20. element.click()
    21. time.sleep(2)
    22. alert = wait.until(EC.alert_is_present())#判断有没有弹出 弹窗
    23. print(alert.text) #如果打开了,打印当前文本值
    24. time.sleep(2)
    25. alert.accept() #点击接受
    26. except TimeoutException as e:
    27. print(traceback.print_exc())
    28. except NoSuchElementException as e:
    29. print(traceback.print_exc())
    30. except Exception as e:
    31. print(traceback.print_exc())
    32. time.sleep(2)
    33. driver.quit()

    6. 键盘操作

    (1) 获取并设置当前窗口位置

    1. # 获取当前窗口的位置
    2. posttion = driver.get_window_position()
    3. print("初始值",posttion)
    4. # 设置当前窗口位置
    5. driver.set_window_position(x=120,y=120)
    6. print("设置后",driver.get_window_position())

    (2) 获取并设置当前窗口大小

    1. # 设置当前窗口的大小
    2. #设置新窗口大小,创建句柄,并取名为 'current'
    3. driver.set_window_size(width="520",height="400",windowHandle='current')
    4. print(driver.get_window_size(windowHandle='current'))

    (3) 使用title属性识别和操作新弹出的浏览器窗口

    1. from selenium import webdriver
    2. from selenium.common.exceptions import NoSuchElementException,TimeoutException
    3. # 导入期望场景类
    4. from selenium.webdriver.support import expected_conditions as EC
    5. # 导入BY类
    6. from selenium.webdriver.common.by import By
    7. #显式等待要用WebDriverWait
    8. # 设置等待时间和超时时间
    9. from selenium.webdriver.support.ui import WebDriverWait
    10. # 导入堆栈类
    11. import traceback
    12. import time
    13. # os.path子库以path为入口,用于操作和处理文件路径
    14. import os
    15. driver = webdriver.Chrome()
    16. url= "file:///"+os.path.abspath("test.html")
    17. driver.get(url)
    18. # 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
    19. # EC.element_to_be_clickable 判断是否被点击
    20. WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()
    21. # 获取当前所有打开的浏览器窗口句柄
    22. all_handles = driver.window_handles
    23. # 打印当前浏览器窗口句柄
    24. print(driver.current_window_handle)
    25. # 打印打开的浏览器窗口的个数
    26. print(len(all_handles))
    27. time.sleep(2)
    28. if len(all_handles)>0:
    29. try:
    30. for windouHandle in all_handles:
    31. # 切换窗口
    32. driver.switch_to.window(windouHandle)
    33. print(driver.title)
    34. #判断当前浏览器窗口的title窗口属性是否等于“搜狗搜索引擎 - 上网从搜狗开始”
    35. if driver.title == "搜狗搜索引擎 - 上网从搜狗开始":
    36. #显示等待页面搜索输入框加载完成,然后输入内容“sogou”首页的浏览器窗口被找到
    37. WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("sogou首页的浏览器窗口被找到")
    38. time.sleep(2)
    39. except NoSuchElementException as e:
    40. print(traceback.print_exc())
    41. except TimeoutException as e:
    42. print(traceback.print_exc())
    43. #将浏览器窗口切换到默认窗口
    44. driver.switch_to.window(all_handles[0])
    45. #打印切换回默认窗口的title
    46. print(driver.title)
    47. #断言当前浏览器窗口的title属性是“你喜欢的水果”
    48. assert "你喜欢的水果" in driver.title
    49. driver.quit()

    (4)操作新弹出的浏览器窗口

    1. "UTF-8">
    2. 你喜欢的水果
    3. id="p1">这是你爱吃的水果么



    1. from selenium import webdriver
    2. from selenium.common.exceptions import NoSuchElementException,TimeoutException
    3. # 导入期望场景类
    4. from selenium.webdriver.support import expected_conditions as EC
    5. # 导入BY类
    6. from selenium.webdriver.common.by import By
    7. #显式等待要用WebDriverWait
    8. # 设置等待时间和超时时间
    9. from selenium.webdriver.support.ui import WebDriverWait
    10. # 导入堆栈类
    11. import traceback
    12. import time
    13. # os.path子库以path为入口,用于操作和处理文件路径
    14. import os
    15. driver = webdriver.Chrome()
    16. url= "file:///"+os.path.abspath("test.html")
    17. driver.get(url)
    18. # 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
    19. # EC.element_to_be_clickable 判断是否被点击
    20. WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()
    21. # 获取当前所有打开的浏览器窗口句柄
    22. all_handles = driver.window_handles
    23. # 打印当前浏览器窗口句柄
    24. print(driver.current_window_handle)
    25. # 打印打开的浏览器窗口的个数
    26. print(len(all_handles))
    27. time.sleep(2)
    28. if len(all_handles)>0:
    29. try:
    30. for windouHandle in all_handles:
    31. # 切换窗口
    32. driver.switch_to.window(windouHandle)
    33. # elenium的page_source方法可以获取到页面源码
    34. PageSource = driver.page_source
    35. if "搜狗搜索" in PageSource:
    36. WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("找到了")
    37. driver.find_element_by_id("stb").click()
    38. time.sleep(3)
    39. except NoSuchElementException as e:
    40. print(traceback.print_exc())
    41. except TimeoutException as e:
    42. print(traceback.print_exc())
    43. #将浏览器窗口切换到默认窗口
    44. driver.switch_to.window(all_handles[0])
    45. #打印切换回默认窗口的title
    46. print(driver.title)
    47. #断言当前浏览器窗口的title属性是“你喜欢的水果”
    48. assert "你喜欢的水果" in driver.title
    49. driver.quit()

    7.截屏

    1. import time
    2. from selenium import webdriver
    3. driver = webdriver.Chrome()
    4. url = "http://www.jg.com"
    5. driver.get(url)
    6. try:
    7. # 截屏
    8. result = driver.get_screenshot_as_file(r"d:\test.png")
    9. print(result)
    10. except IOError as e:
    11. print(e)
    12. driver.quit()

    8.断言

    1. # 通过断言页面是否存在某些关键字来确定页面而按照预期加载
    2. assert "selenium" in driver.page_source,"页面源码中不存在该关键字!"

    9. Selenium操作JS弹窗控件

    (1)提示弹窗

    1. "UTF-8">
    2. 弹窗控件
    3. "center">
    4. 你好,29快乐

    5. <input type="button" onclick="showPro()" value="输入框弹窗按钮"/>
    6. <input type="button" onclick="showAlert2()" value="提示弹窗按钮"/>
    7. <input type="button" onclick="showAlert()" value="确认弹窗按钮"/>



    8. id="textSpan">
    9. "color: green">还需要在努力呀
    1. from selenium import webdriver
    2. import time
    3. import os
    4. driver = webdriver.Chrome()
    5. driver.maximize_window()
    6. url="file:///"+os.path.abspath("index.html")
    7. driver.get(url)
    8. # 获取alert对话框
    9. driver.find_element_by_xpath("/html/body/div/input[2]").click()
    10. alert = driver.switch_to.alert #获取弹窗的方法
    11. time.sleep(2)
    12. print(alert.text)#打印对话框文本
    13. alert.accept()#接受弹窗
    14. time.sleep(2)
    15. driver.quit()

    (2) 确认弹窗

    1. from selenium import webdriver
    2. import time
    3. import os
    4. driver = webdriver.Chrome()
    5. driver.maximize_window()
    6. url="file:///"+os.path.abspath("index.html")
    7. driver.get(url)
    8. # 获取alert对话框
    9. driver.find_element_by_xpath("/html/body/div/input[3]").click()
    10. alert = driver.switch_to.alert #获取弹窗的方法
    11. time.sleep(2)
    12. print(alert.text)#打印对话框文本
    13. alert.accept()#接受弹窗
    14. print(alert.text)#打印对话框文本
    15. alert.accept()#接受弹窗
    16. time.sleep(2)
    17. driver.find_element_by_xpath("/html/body/div/input[3]").click()
    18. alert = driver.switch_to.alert #获取弹窗的方法
    19. time.sleep(2)
    20. print(alert.text)#打印对话框文本
    21. alert.dismiss() #选择 "取消按钮"
    22. print(alert.text)#打印对话框文本
    23. alert.accept()#接受弹窗
    24. driver.quit()

    (3)输入弹框

    1. from selenium import webdriver
    2. import time
    3. import os
    4. driver = webdriver.Chrome()
    5. url = "file:///"+os.path.abspath("index.html")
    6. driver.get(url)
    7. # 获取prompt()输入对话框
    8. driver.find_element_by_xpath("/html/body/div/input[1]").click()
    9. # 获取警告对话框内的文本
    10. prompt = driver.switch_to.alert
    11. time.sleep(2)
    12. # 打印取警告对话框内的文本
    13. print(prompt.text)
    14. # 在输入框内输入"努力"
    15. prompt.send_keys("努力")
    16. time.sleep(2)
    17. # 点击确定按钮
    18. prompt.accept()
    19. # 获取警告框文本
    20. prompt2 = driver.switch_to.alert
    21. print(prompt2.text)
    22. prompt2.dismiss()#取消按钮
    23. driver.quit()

    10.鼠标悬停与释放

    鼠标释放

    1. from selenium import webdriver
    2. from selenium.webdriver import ActionChains
    3. import time
    4. import os
    5. driver = webdriver.Chrome()
    6. url="file:///"+os.path.abspath("mouse_test.html")
    7. driver.get(url)
    8. div = driver.find_element_by_id("div1")
    9. # 在id属性值为'div1'的元素上,执行按下的鼠标左键,并保持
    10. ActionChains(driver).click_and_hold(div).perform()
    11. time.sleep(2)
    12. # 释放按下的鼠标左键
    13. ActionChains(driver).release(div).perform()
    14. time.sleep(2)
    15. driver.quit()

     鼠标悬停

    1. from selenium import webdriver
    2. #ActionChains 是自动化执行低级交互的一种方式,例如:鼠标移动,鼠标点按,键盘操作,文本操作等
    3. from selenium.webdriver import ActionChains
    4. import time
    5. import os
    6. driver = webdriver.Chrome()
    7. url = "file:///"+os.path.abspath("test_001.html")
    8. driver.get(url)
    9. link1 = driver.find_element_by_link_text("鼠标指过来1")
    10. link2 = driver.find_element_by_link_text("鼠标指过来2")
    11. p= driver.find_element_by_xpath("//p")
    12. ActionChains(driver).move_to_element(link1).perform()
    13. time.sleep(2)
    14. ActionChains(driver).move_to_element(p).perform()
    15. time.sleep(2)
    16. ActionChains(driver).move_to_element(link2).perform()
    17. time.sleep(2)
    18. ActionChains(driver).move_to_element(link1).perform()
    19. time.sleep(2)
    20. driver.quit()

    以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了

    各位想获取资料的朋友请点赞 + 评论 + 收藏,三连!

    三连之后我会在评论区挨个私信发给你们~

     

  • 相关阅读:
    Git 教程详解
    在setup中使用计算属性
    python 数的计算
    nginx rewrite参数 以及 $1、$2参数解析(附有生产配置实例)
    Linux C语言开发-D10控制语句if
    SpringCloud无介绍快使用,sentinel注解@SentinelResource的基本使用(二十三)
    完美卸载mac电脑里的软件及残留清理教程
    TreeMap匿名内部类使用Comparator方法(比较器)被替换
    认识CAN光纤转换器的光纤接口和配套光纤线缆
    C++设计模式-创建型设计模式:简单工厂
  • 原文地址:https://blog.csdn.net/m0_70618214/article/details/132941750