Selenium自动化测试那些必备巩固的知识(细致)

前言

自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够在项目中持之以恒的实践自动化测试的团队,却依旧不是非常多。有的团队知道怎么做,做的还不够好;

有的团队还正在探索和摸索怎么做,甚至还有一些多方面的技术上和非技术上的旧系统需要重构……

一、元素等待
大多数的 Web 应用程序都是使用 AJAX 和 Javascript 开发的,加载时都有加载顺序,可能打开了网页但是元素并未加载出来,这个时候就定位不到元素了,就会报错。所以,我们需要等到元素被加载出来后再去进行定位等操作。

1、强制等待
如果元素已经出现还是要继续等待,直到超时,会浪费很多的时间,不建议使用。

import time
time.sleep(5)  # 固定休眠5

2、隐式等待
创建driver时,为浏览器对象创建一个等待时间,整个 driver 的会话周期内设置一次即可。需要等待整个页面加载完成才会行下一步,可能页面加载未完成的时候,需要定位的元素已经加载完成了,但因为某些JS文件、图片未加载完成,不能执行下一步,增加了不必要的等待时间。

from selenium import webdriver


driver = webdriver.Chrome()
driver.get("http://localhost:63342/webtest/demo.html")
driver.implicitly_wait(10)
driver.quit()

3、显示等待

显示等待只对某个元素生效,无需等待页面加载完成,节省了加载时间。

等到某个条件满足后,再执行操作(程序每隔 x 秒查询一次,若条件成立则执行下一步,否则继续等待,超过设置的最长时间条件仍不成立则抛出 TimeoutException)

WebDriverWait 显示等待类: WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None):

driver:浏览器驱动 timeout:最长超时时间,默认以秒为单位 poll_frequency:检测的间隔(步长)时间,默认为0.5S ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常

WebDriverWait 一般和 until()、until_not() 方法配合使用: until:直到条件成立 until_not:直到条件不成立

expected_condition 模块提供了希望发生的条件,如 presence_of_element_located 元素存在、visibility_of_element_located 元素可见、element_to_be_clickable 元素可点击,常用操作如下:

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
driver.find_element(By.ID, "kw").send_keys("test")

二、元素基本操作

1、点击

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
ele = driver.find_element(By.ID, "kw").send_keys("test")


# 点击
driver.find_element(By.ID, "su").click()
driver.quit()

2、输入/清空文本

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
ele = driver.find_element(By.ID, "kw")
# 输入文本
ele.send_keys("test")
sleep(1)
# 清空输入框文本
ele.clear()
driver.quit()

3、获取元素尺寸、坐标

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
ele = driver.find_element(By.LINK_TEXT, "新闻")
print(ele.size) # 获取元素宽高
print(ele.location) # 获取元素x,y坐标值
print(ele.rect) # 获取元素宽高、xy坐标值
driver.quit()

4、获取元素标签文本

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
ele = driver.find_element(By.LINK_TEXT, "新闻")
# 获取元素 text 属性
print(ele.text)
driver.quit()

5、获取元素属性

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
ele = driver.find_element(By.LINK_TEXT, "新闻")
print(ele.get_attribute("href"))
ele = driver.find_element_by_tag_name("html")
#  获取元素标签的内容
# print(ele.get_attribute('textContent'))
# # 获取元素内的全部HTML
# print(ele.get_attribute('innerHTML'))
# 获取包含选中元素的HTML
print(ele.get_attribute('outerHTML'))
driver.quit()

6、检查元素是否可见、可点击等

ele.is_displayed()
ele.is_enabled()
ele.is_selected()

7、获取元素标签类型

ele.tag_name

8、表单提交

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
ele = driver.find_element_by_id('kw')
ele.send_keys('test')
ele.submit() # 提交表单,可以模拟在搜索框输入文字后回车的操作
driver.quit()

9、指定元素截图

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
ele = driver.find_element_by_link_text("新闻")
ele.screenshot("test.png")  # 截图
driver.quit()

三、总结

坚持做自己,不是一意孤行,而是在市场竞争中,随缘而不变,稳定的贯彻自己的棋风棋路,非达目标,绝不中止。

在人生中,有时最好走的路不一定是大路,而是小路;在现实中,有时最便捷的路不一定是直路,而是折路。

也许你做的事情看不到成果,但是不要害怕,你不是没有成长,而是在扎根!

学习安排上!

感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几个月时间整理的非常全面的,希望也能帮助到有需要的你!
在这里插入图片描述
这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流,同时我也把上面花几个月整理的资料放里边了,赶快加入吧。

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值