webUI自动化之元素及欣赏器操纵

海哥  论坛元老 | 2024-6-26 19:11:06 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3009

一、元素定位方式

  1、元素属性定位:

  1 element = driver.find_element_by_id(self, ‘id’)
  该类方法已经过期,新的方法如下:
  
  1. element = driver.find_element(By.ID, '')        # 用元素的 ID 属性定位
  2. element = driver.find_element(By.CLASS_NAME, '')    # 用元素的 CLASS_NAME 属性定位
  3. element = driver.find_element(By.NAME, '')       # 用元素的 NAME 属性定位
  4. element = driver.find_element(By.LINK_TEXT, '')    # 用元素的 LINK_TEXT(链接文本) 定位
  5. element = driver.find_element(By.PARTIAL_LINK_TEXT, '')  # 用元素的 LINK_TEXT(链接文本,部分匹配) 定位
  6. element = driver.find_element(By.TAG_NAME, '')    # 用元素的 TAG_NAME(标签名) 定位
  7. element = driver.find_element(By.CSS_SELECTOR, '')  # 用元素的 CSS选择器 定位,这个可以先去了解一下CSS选择的用法,也可以不用,F12可直接复制当前元素的 css属性 值
  8. element = driver.find_element(By.XPATH, '')      # 用元素的 XPATH路径 定位,这个也可以去了解一下XPATH的语法,也可以不用,F12可直接复制当前元素的 xpath 路径
复制代码
class By如下:
  

  扩展:
  xpath教程
  二、鼠标及键盘事件

  1、鼠标事件

  模仿鼠标操纵,需先引入 ActionChains 类,详细用法如下:
  
  1. 1 from time import sleep
  2. 2 from selenium import webdriver
  3. 3 from selenium.webdriver.common.by import By
  4. 4 from selenium.webdriver.common.action_chains import ActionChains  # 引入
  5. 5
  6. 6 driver = webdriver.Chrome()
  7. 7 driver.get(r'https://xxx')  # 打开浏览器并访问该链接,这里的链接不便展示哈
  8. 8 driver.maximize_window()
  9. 9
  10. 10 # 定位元素并操作
  11. 11 driver.find_element(By.NAME, 'username').send_keys('v-luoyang')
  12. 12 driver.find_element(By.NAME, 'password').send_keys('12456')
  13. 13 btn = driver.find_element(By.CLASS_NAME, 'el-button')
  14. 14
  15. 15 ActionChains(driver).click(btn).perform()   # 单击 btn 元素,更多方法参见 ActionChains 的源码,说的非常清楚
  16. 16
  17. 17
  18. 18 # 关闭并退出浏览器
  19. 19 driver.quit()
复制代码
2、键盘事件

  模仿键盘操纵,需先引入 Keys 模块,再使用send_keys方法,详细使用如下:
  1. 1 from time import sleep
  2. 2 from selenium import webdriver
  3. 3 from selenium.webdriver.common.by import By
  4. 4 from selenium.webdriver.common.keys import Keys
  5. 5
  6. 6 driver = webdriver.Chrome()
  7. 7 driver.get(r'https://xxx/')  # 打开浏览器并访问该链接,这里的链接不便展示哈
  8. 8 driver.maximize_window()
  9. 9
  10. 10 # 定位元素
  11. 11 user_ele = driver.find_element(By.NAME, 'username')
  12. 12 pwd_ele = driver.find_element(By.NAME, 'password')
  13. 13
  14. 14 user_ele.send_keys('v-luoyang')     # 输入值
  15. 15 user_ele.send_keys(Keys.CONTROL, 'a')     # 全选
  16. 16 user_ele.send_keys(Keys.DELETE)     # 删除
  17. 17 user_ele.send_keys(Keys.ENTER)     # 回车
  18. 18
  19. 19 btn = driver.find_element(By.CLASS_NAME, 'el-button')
  20. 20 btn.click()
  21. 21
  22. 22
  23. 23 # 关闭并退出浏览器
  24. 24 #driver.quit()
复制代码
更多的支持的键盘符号可在Keys里检察
  三、欣赏器操纵

  
  1. 1 from selenium import webdriver
  2. 2
  3. 3 driver = webdriver.Chrome()     # 获取浏览器对象
  4. 4 driver.get(r'https://gad.dev.ztgame.com/')  # 打开浏览器并访问该链接,这里的链接不便展示哈
  5. 5 driver.get(r'https://gad.dev.ztgame.com/#/creative/material')   # 进入其他链接
  6. 6 driver.maximize_window()    # 浏览器窗口最大化
  7. 7 driver.set_window_size(width=480, height=800)   # 设置浏览器的宽高
  8. 8 name = driver.name  # 获得浏览器名称
  9. 9 driver.forward()    # 前进
  10. 10 driver.back()   # 后退
  11. 11 driver.refresh()    # 刷新
  12. 12 current_handle = driver.current_window_handle   # 获取当前窗口句柄,即获取当前浏览器当前窗口的编号
  13. 13 all_handles = driver.window_handles     # 获取当前浏览器所有窗口的句柄(当前浏览器指通过上面 get() 方法打开的浏览器)
  14. 14 driver.switch_to_window('句柄')   # 切换当前窗口为指定的句柄的窗口
  15. 15 current_url = driver.current_url    # 获取当前窗口的url
  16. 16 title = driver.title    # 获取当前窗口的标题
  17. 17 page = driver.page_source   # 获取当前窗口的源码
  18. 18 driver.get_screenshot_as_file('截图保存路径')     # 窗口截图,保存至指定的路径
  19. 19
  20. 20 driver.close()      # 关闭当前窗口
  21. 21 driver.quit()       # 关闭所有窗口并退出浏览器
复制代码
四、等待

  1、sleep()

  例:
  sleep(3),逼迫等待,无论程序是否加载完成,必须等待3s,常用于调试,在元素定位莫名定位不到的时间用它也许可以解决问题
  2、隐式等待

  例:
  driver.implicitly_wait(30)   # 隐性等待,最长等30秒
  相当于设置了一个最长等待时间,若在规定时间内找到则实行下一步,未找到则抛出NoSuchElementException;它的作用域是全局的,跟driver的生命周期雷同,一般界说在父类中,用于给所有子类的页面元素设置该等待机制,设置一次,全局有用,直到 driver 实例被关闭。
  3、显式等待

  显式等待一般搭配 until() 方法使用,意为直到规定时间内定位到该元素,例:
  WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))    # locator 如 locator = (By.ID, ‘username’)
  PS:这里用到了 WebDriverWait 类与 expected_conditions 模块,这里借用一下另一个博客的(他的博客地址)
  ①WebDriverWait 类里主要有两个方法和一个 init 方法,详细用处可以看源码,但官方话看得我是头昏脑胀,还是看一些比较轻易懂的
  init,参数如下:
  1. 1     driver: 传入WebDriver实例,即我们上例中的driver
  2. 2     timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
  3. 3     poll_frequency: 调用until或until_not中的方法的间隔时间,默认是0.5秒
  4. 4     ignored_exceptions: 忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。
复制代码
until,参数如下:
  1 method: 在等待期间,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,直到返回值不是False 2 message: 如果超时,抛出TimeoutException,将message传入异常
  
  until_not 与 until 相反。
  调用方法:
  1 WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可实行方法, 超时时返回的信息) ,这里的可实行方法指该方法中肯定要有__call()__方法,没有就会报错 TypeError: ‘xxx’ object is not callable
  ② expected_conditions 是 selenium 中的一个模块(selenium.webdriver.support.expected_conditions),主要包含了一系列的判断条件。
  
  以下两个条件类验证title,验证传入的参数title是否等于或包含于driver.title
          title_is
          title_contains
  以下两个条件验证元素是否出现,传入的参数都是元组范例的locator,如(By.ID, ‘kw’)
        顾名思义,一个只要一个符合条件的元素加载出来就通过;另一个必须所有符合条件的元素都加载出来才行
          presence_of_element_located
          presence_of_all_elements_located
  以下三个条件验证元素是否可见,前两个传入参数是元组范例的locator,第三个传入WebElement
        第一个和第三个实在质是一样的
          visibility_of_element_located
          invisibility_of_element_located
          visibility_of
  以下两个条件判断某段文本是否出现在某元素中,一个判断元素的text,一个判断元素的value
          text_to_be_present_in_element
          text_to_be_present_in_element_value
  以下条件判断frame是否可切入,可传入locator元组大概直接传入定位方式:id、name、index或WebElement
          frame_to_be_available_and_switch_to_it
  以下条件判断是否有alert出现
          alert_is_present
  以下条件判断元素是否可点击,传入locator
          element_to_be_clickable
  以下四个条件判断元素是否被选中,第一个条件传入WebElement对象,第二个传入locator元组
        第三个传入WebElement对象以及状态,相等返回True,否则返回False
        第四个传入locator以及状态,相等返回True,否则返回False
          element_to_be_selected
          element_located_to_be_selected
          element_selection_state_to_be
          element_located_selection_state_to_be
  最后一个条件判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
          staleness_of
  最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,此中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级连续集成、测试架构开发测试框架、性能测试、安全测试等。
  学习不要孤军奋战,最好是能抱团取暖,相互成就一起发展,群众效应的效果是非常强大的,各人一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以参加我们的测试技能交换扣扣群:914172719(里面有各种软件测试资源和技能讨论)
  喜好软件测试的小同伴们,如果我的博客对你有帮助、如果你喜好我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表