Web自动化--入门基本

一、Selenium简介及安装
【简介】
Selenium支持web浏览器的自动化。它主要由三个工具构成:WebDriver、IDE、Drid
【官网】
二、Selenium环境配置步骤
  1. 准备好python环境
  2. 准备好selenium环境
  3. 下载浏览器对应的driver版本
  4. driver配置环境变量
  5. 在python中import对应的依赖
【前提】
配置好python环境
配置好pip工具
【安装】
pip install selenium
或者在pycharm直接安装
pycharm安装流程:File-->Setting-->Project :(项目名)-->Python Interpreter-->+-->输入selenium-->点击左下角Install Package
三、Driver的配置
  • Driver的介绍
  • Driver的下载
-->淘宝镜像: CNPM Binaries Mirror
-->官方网站:https://chromedriver.storage.googleapis.com/index.html
  • Driver的安装
1.找到和自己浏览器版本适配的driver版本     注:浏览器点击右上角‘...’-->帮助-->关于Google Chrome-->可以看到浏览器的版本,根据当前浏览器的版本下载
2.导入到环境变量中  系统变量-path中
验证:cmd中输入chromedriver,出现版本号就是成功了
四、Selenium IDE安装下载
官网:https://www.selenium.dev/downloads/
启动:安装完成后,通过在浏览器的菜单栏点击图标来启动
Selenium IDE 录制用例
  1. 创建新项目后,系统会提示为它命名
  2. 要求提供URL,(url是要录制测试脚本的网站的url)设置一次就可以整个项目的所有测试当中使用
  3. 在页面的操作,都会记录到IDE中,操作完成后,要切换到IDE窗口,停止录像
  4. 停止以后,我们可以为刚录制的用例取名
【启动后的页面】
点击第一个,新项目中创建一个新test
输入完url,点击start recording,操作完成后,关闭网页弹窗
注:不要忘记点击暂停按钮,图中为点击后的样式
最后会弹出弹窗-->输入Test Name即可
IDE的使用
五、Selenium 用例编写
小白入门文档:https://selenium-python.readthedocs.io/
用例的关键要素
  • 导入依赖
  • 创建driver
  • 执行自动化步骤
  • 断言
例:用谷歌浏览器,打开百度,并验证title
​
import unittest
from selenium import webdriver
class BaiduTest(unittest.TestCase): #定义一个测试类
def setUp(self): #定义一个setup方法--在执行测试用例脚本之前进行初始化环境
self.driver = webdriver.Chrome() #初始化driver
self.driver.maximize_window() #屏幕最大化
self.driver.get('百度一下,你就知道') #打开网址
self.driver.implicitly_wait(30) #隐式等待
def tearDown(self): #定义一个tearDown方法
self.driver.quit() #回收driver---资源初始化
def test_baidu_title(self): #编写测试用例
assert self.driver.title == '百度一下,你就知道' #查看百度的title
if __name__ == '__main__':
if __name__ == '__main__':
unittest.main()
​
注:其中setUp() 和ternDown()属于测试固件
六、Selenium 三种等待方式
  • 直接等待
  • 隐式等待
  • 显式等待
三种等待方式可以同时使
①直接等待
强制等待,线程休眠一定时间
time.sleep(3)
​
import time
import unittest
from selenium import webdriver
class BaiduWait(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("百度一下,你就知道")
self.driver.maximize_window()
def test_baiduwait(self):
time.sleep(5)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main
​
②隐式等待
设置一个等待时间,如果在这个时间段内,没有找到想要的元素,会抛出异常,默认时间是0.5秒,不会浪费时间
缺点: 全局的
self.driver.implicitly_wait(3)
​
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
class BaiduWait(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("百度一下,你就知道")
self.driver.maximize_window()
self.driver.implicitly_wait(15) # 隐式等待是全局的
def test_BaiduWait(self):
self.driver.find_element(By.ID, 'kw').send_keys("测试")
self.driver.find_element(By.CSS_SELECTOR, '#su').click()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main
​
③显式等待
在代码中定义等待条件, 当条件发生时才继续执行代码
WebDriverWait 配合unitil()和unitil_not()方法,根据判断条件进行等待
程序每隔一段时间(默认为0.5秒)进行条件判断,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间
优点:指定了具体是哪个操作需要等待多长时间
 
​
方法①
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
class BaiduWait(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("百度一下,你就知道")
self.driver.maximize_window()
def test_BaiduWait(self):
self.driver.find_element(By.ID, 'kw').send_keys("测试")
def wait(x): # 定义一个方法,判断元素个数【注:一定要传参】
return len(self.driver.find_elements(By.CSS_SELECTOR, '#su')) < 1 # 如果这个元素的数量>=1,则继续执行
WebDriverWait(self.driver, 10).until(wait) # 如果<1,则等待10s,抛出异常
self.driver.find_element(By.CSS_SELECTOR, '#su').click()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main
方法②
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions                             #expected_conditions中存在很多判断条件
from selenium.webdriver.support.wait import WebDriverWait
class BaiduWait(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("百度一下,你就知道")
self.driver.maximize_window()
def test_BaiduWait(self):
self.driver.find_element(By.ID, 'kw').send_keys("测试")
WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable(By.CSS_SELECTOR, '#su')) #判断元素是否可以点击,如果可以点击,继续执行
self.driver.find_element(By.CSS_SELECTOR, '#su').click()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main
​
七、Web控件定位与常见操作
XPATH表达式
小练习-->用XPATH,定位
​
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
import warnings
class TestScore (unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("百度一下,你就知道")
self.driver.maximize_window()
warnings.simplefilter("ignore", ResourceWarning) # 忽略警告信息
def test_score(self):
self.driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys("测试")             #XPATH定位到输入框,并且输入“测试”
time.sleep(5)
self.driver.find_element(By.XPATH, '//*[@id="su"]').click()                   #XPATH定位到【百度一下】按钮,并进行点击操作
time.sleep(3)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
​
常用 CSS selector 
​
import time
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
import warnings
class TestScore (unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("百度一下,你就知道")
self.driver.maximize_window()
warnings.simplefilter("ignore", ResourceWarning) # 忽略警告信息
def test_score(self):
# self.driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys("测试")
self.driver.find_element(By.ID, 'kw').send_keys("测试")                      
time.sleep(5)
# self.driver.find_element(By.XPATH, '//*[@id="su"]').click()
self.driver.find_element(By.CSS_SELECTOR, '#su').click()
time.sleep(3)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
​
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值