配置好Python环境和Selenium后,使用PyCharm开始自动化测试吧。
Hello 自动化测试
from selenium import webdriver
import time
dr = webdriver.Firefox() # 初始化火狐浏览器实例
dr.maximize_window() # 最大化浏览器
dr.get("http://www.baidu.com/") # 通过get方法打开一个url网站
print(dr.title) # 打印页面title
dr.find_element_by_id("kw").send_keys("python") # 获取id是'kw'的元素,设置值为'Python'
time.sleep(3) # 强制等待3秒
dr.find_element_by_id("su").click() # 获取id是'su'的元素,点击一下
time.sleep(3) # 强制等待3秒
dr.quit() # 关闭浏览器
运行!就能看到效果了。
其中time.sleep(3)强制等待3秒才执行下面的步骤,有可能3秒过后网页还没有加载完,会发生不知名的错误。
那就把3变大一点变成10,time.sleep(10)。如果这样自动化的效率就很低了。🤣
time.sleep()这是非常重要的一部分
例如在爬取使用ajax、js等方法编写的网页就不能确定我们定位的元素是否已经加载出来了。当元素未加载出来时,我们就去调用当然会时常遇到报错的情况。
在处理这些界面读取时常采用以下两种方法。
方法一 time.sleep() 不推荐,固定等待时间不能确定是否足够页面加载完成
方法二 显式等待 指满足某一条件之后再执行后面的代码 可以设置最长的等待时间
显式等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
dr = webdriver.Firefox() # 初始化火狐浏览器实例
dr.maximize_window() # 最大化浏览器
dr.get("http://www.baidu.com/") # 通过get方法打开一个url网站
print(dr.title) # 打印页面title
try:
# 判断页面元素是否已经加载出来
element = WebDriverWait(dr, 10).until(EC.presence_of_element_located((By.ID, "kw")))
dr.find_element_by_id("kw").send_keys("python")
dr.find_element_by_id("su").click()
finally:
time.sleep(3) # 等待3秒再关闭浏览器
dr.quit() # 关闭浏览器
关于CSS定位
- id属性、class、标签定位他们还能组合在一起使用
以百度首页为例
#表示id属性 .表示class属性 标签直接使用
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("input")
其中dr.find_element_by_css_selector("#kw") 和dr.find_element_by_id("kw")是一样的
- 组合形式
dr.find_element_by_css_selector("input.s_ipt")
- 层级关系
这里是input下的span下的a元素
dr.find_element_by_css_selector("input > span > a")
网友评论