Python3+Selenium3自动化测试

配置好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")

你可能感兴趣的:(Python3+Selenium3自动化测试)