- selenium定义:
Selenium 是开源的自动化测试工具,它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web 的管理任务自动化。
环境准备:
下载chromedriver,将下载的exe文件放在python安装根目录,若放在其他目录需要在PATH环境变量中添加该地址。常用的参数:
参数 | 说明 |
---|---|
'start-maximized' | 浏览器窗口最大化 |
'incognito' | 无痕模式 |
'useAutomationExtension', False & "excludeSwitches", ['enable-automation'] | 关闭左上方Chrome正在受到自动测试软件的控制的提示 |
'headless' | 无界面运行 |
'window-size= 800,600' | 设置浏览器窗口大小 |
- 8种定位元素的方式:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys #提供了键盘的代码(回车,ALT等)
opt = webdriver.ChromeOptions()
opt.add_argument('start-maximized')
driver = webdriver.Chrome(options=opt)
driver.get('https://www.baidu.com/')
driver.find_element(By.ID,'kw').send_keys('By ID')
driver.find_element(By.NAME,'wd').send_keys('By NAME')
driver.find_element(By.LINK_TEXT,'新闻').click()
list = driver.find_element(By.PARTIAL_LINK_TEXT,'百度').click()
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys('By XPATH')
driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('By CLASS_NAME')
driver.find_element(By.CSS_SELECTOR,'#kw').send_keys('By CSS_SELECTOR')
tags = driver.find_elements(By.TAG_NAME,'input')
for t in tags:
if t.get_attribute('type') == 'text' and t.get_attribute('class') == 's_ipt':
t.send_keys('By Tag_name')
- 定位弹窗:
a = driver.switch_to.alert # 定位到窗口
print(a.text) # 打印文本信息
a.accept() # 点击alert确认按钮
- 切换到子框架:
driver.switch_to.frame('iframe的Id或Name') # 切换框架
drive.switch_to.default_content() # 退出框架
- cookies:
driver.get_cookie('remember_user_token') # 获取某项cookie的值
driver.get_cookies() # 获取所有cookie
driver.add_cookie(cookie) # 添加cookie
- 保持网页截图:
driver.get_screenshot_as_file('test.png')
- 显式等待和隐式等待:
#这段代码会等待10秒,如果10秒内找到元素则立即返回,否则会抛出TimeoutException异常,WebDriverWait默认每500毫秒调用一下ExpectedCondition直到它返回成功为止。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable((By.ID,'main'))) #等待一个确定的条件触发然后才进行更深一步的执行
#隐式等待
drive.implicitly_wait(10) # seconds
使用Selenium测试:
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys #提供了键盘的代码(回车,ALT等)
'''
参考文档:https://python-selenium-zh.readthedocs.io/zh_CN/latest/
'''
class PythonOrgSearch(unittest.TestCase):
def setUp(self): #初始化
self.driver = webdriver.Chrome()
def test_search_python(self): #测试用例的方法需要以test开头
driver = self.driver
driver.get('http://www.python.org') #等待页面加载完(就是onload函数被触发了)
assert 'Python' in driver.title #断言用来判断一个表达式,在表达式为false的时候触发异常
ele = driver.find_element(By.NAME,'q')
ele.send_keys('python')
ele.send_keys(Keys.RETURN)
assert 'No results found' not in driver.page_source #用断言来判断是否有返回
def tearDown(self) -> None:
self.driver.quit() #close是关闭标签,而quit会退出整个浏览器
if __name__ == '__main__':
unittest.main()