MindMap Gallery Selenium思维导图
这是一篇关于Selenium思维导图,Selenium是一个用于Web应用程序测试的工具,此脑图包含第一个自动化脚本、unittest测试框架等。希望对你有所帮助!
Edited at 2023-11-03 10:47:21Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Projektmanagement ist der Prozess der Anwendung von Fachwissen, Fähigkeiten, Werkzeugen und Methoden auf die Projektaktivitäten, so dass das Projekt die festgelegten Anforderungen und Erwartungen im Rahmen der begrenzten Ressourcen erreichen oder übertreffen kann. Dieses Diagramm bietet einen umfassenden Überblick über die 8 Komponenten des Projektmanagementprozesses und kann als generische Vorlage verwendet werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Einhundert Jahre Einsamkeit ist das Meisterwerk von Gabriel Garcia Marquez. Die Lektüre dieses Buches beginnt mit der Klärung der Beziehungen zwischen den Figuren. Im Mittelpunkt steht die Familie Buendía, deren Wohlstand und Niedergang, interne Beziehungen und politische Kämpfe, Selbstvermischung und Wiedergeburt im Laufe von hundert Jahren erzählt werden.
Projektmanagement ist der Prozess der Anwendung von Fachwissen, Fähigkeiten, Werkzeugen und Methoden auf die Projektaktivitäten, so dass das Projekt die festgelegten Anforderungen und Erwartungen im Rahmen der begrenzten Ressourcen erreichen oder übertreffen kann. Dieses Diagramm bietet einen umfassenden Überblick über die 8 Komponenten des Projektmanagementprozesses und kann als generische Vorlage verwendet werden.
Selenium
1. 第一个自动化脚本
from selenium import webdriver from time import sleep browser = webdriver.Chrome( ) browser.get('http://127.0.0.1/upload/forum.php') sleep(5) browser.quit()
#隐式等待 browser.implicitly_wait(5)
2. WebDriver API
定位
定位元素
1. id定位
HTML规定id属性在HTML文档中必须是唯一的
browser.find_element_by_id('ls_password').send_keys('123456')
2. name定位
browser.find_element_by_name('username').send_keys('admin')
3. class定位
browser.find_element_by_class_name('pn').click( )
4. tag name定位
browser.find_element_by_tag_name('input').send_keys('123456')
5. link定位
专门用来定位文本链接
browser.find_element_by_link_text('默认版块').click( )
6. partial link定位
partial link定位是对link元素的一种补充,有时候文本链接比较长,我们可以取文本链接的一部分定位
browser.find_element_by_partial_link_text('默认').click( )
7. xpath定位
//表示相对路径
[@id=‘ls_username’]表示元素的id等于‘ls_username’
browser.find_element_by_xpath('//input[@name="password"]').send_keys('123456')
browser.find_element_by_xpath('//button[@class="pn vm"]').click( )
属性结合层级定位
text 获取元素的文本 <开始标签>文字(文本)</结束标签>
a = browser.find_element_by_xpath('//button[@class="pn vm"]/em').text print(a)
browser.find_element_by_xpath("//div/a[@class='xi2 xw1']").click( )
模糊定位
text( )函数
browser.find_element_by_xpath('//a[text()="退出"]').click( )
contains( )函数
browser.find_element_by_xpath('//a[contains(@href,"logout")]').click()
starts-with()函数
browser.find_element_by_xpath('//a[starts-with(@href,"member.php?mod=l")]').click( )
8. CSS Selector定位
id用#
browser.find_element_by_css_selector('#ls_password').send_keys('123456')
browser.find_element_by_css_selector('#ls_username').send_keys('admin')
class用 "."
browser.find_element_by_css_selector('.pn.vm').click( )
9. XPath与CSS对比
定位一组元素
定位一组元素,返回一个列表
控制
控制浏览器
1. 控制浏览器窗口大小
set_window_size( )
driver.set_window_size(480,800)
browser.set_window_size(480,600)
2. 最大化浏览器
maximize_window( )
driver.maximize_window( )
browser.maximize_window()
3. 控制浏览器的前进
back( )
driver.back( )
browser.back()
forword( )
driver.forward( )
browser.forward()
4. 模拟浏览器刷新
refresh( )
driver.refresh( )
browser.refresh()
简单元素操作
from selenium import webdriver from time import sleep browser = webdriver.Chrome( ) browser.get('http://127.0.0.1/upload/forum.php') sleep(2) #定位用户名输入框 username=browser.find_element_by_id('ls_username') username.send_keys('admin') sleep(1) #清空文本 username.clear( ) #获取其他属性 print('name',username.get_attribute('name')) print('class',username.get_attribute('class')) print('tabindex',username.get_attribute('tabindex')) #is_displayed() 返回元素的结果是否可见,如果可见返回True,否则返回False #登录旁的立即注册 True print(browser.find_element_by_xpath("//td/a[@class='xi2 xw1']").is_displayed( )) #快捷导航下的立即注册,False print(browser.find_element_by_xpath("//div/a[@class='xi2 xw1']").is_displayed( )) sleep(5) browser.quit( )
下拉列表操作
from selenium.webdriver.support.select import Select #下拉列表的操作封装在Select类里面 #生成一个Select对象,参数为要选择的下拉列表 #自动导入,光标放在Select类上面,然后按下Alt Enter,选择Select类导入 s = Select(browser.find_element_by_id('education'))
调用方法
根据索引来选择
s.select_by_index(2) #选择博士
根据值来选择,HTML中value属性的值
s.select_by_value("2") #选择大学
根据可见的文本来选择,能看见的下来列表的项
s.select_by_visible_text("博士")
鼠标操作
WebDriver中关于鼠标操作的方法封装在ActionChains类中
执行动作
perform( )
右击
context_click( )
双击
double_click( )
悬停
move_to_element( )
拖动
drag_and_drop(source,target)
键盘操作
WebDriver中通过Keys( )类来操作键盘的所有按键 通过send_keys( )方法可以模拟输入键盘上的按键
删除键(BackSpace)
send_keys(Keys.BACK_SPACE)
空格键(Space)
send_keys(Keys.SPACE)
回车键(Enter)
send_keys(Keys.ENTER)
制表键(Tab)
send_keys(Keys.TAB)
全选 (Ctrl A)
send_keys(Keys.CONTROL,‘a’)
复制 (Ctrl C)
send_keys(Keys.CONTROL,‘c’)
粘贴 (Ctrl V)
send_keys(Keys.CONTROL,‘v’)
框架切换
Web应用中经常会遇到frame/iframe框架嵌套页面的应用
WebDriver提供了switch_to.frame方法将当前定位的主体切换到frame/iframe框架内嵌页面中
switch_to.default_content( )方法跳出当前的框架
窗口切换
WebDriver提供了switch_to.window( )方法实现不同窗口之间的切换
current_window_handle:获取当前窗口句柄
window_handles:返回所有窗口的句柄,存在在列表中
弹出框操作
切换到弹出框
switch_to.alert
确定按钮
accept( )
取消按钮
dismiss( )
执行JS
WebDriver没有提供浏览器滚动条的操作方法,在这种情况下,可以借助JavaScript来控制滚动条
WebDriver提供了execute_script( )方法来执行JS代码
window.scrollTo(x,y) 是JavaScript中用于设置浏览器滚动条的水平和垂直位置,第一个参数表示水平的左间距,第一个参数表示垂直的上边距
3. unittest测试框架
作用
自动化用例的组织和管理
自动化用例执行
测试结果统计和测试报告生成
unittest是Python的单元测试框架,它不仅适用于单元测试,也适用WEB自动化测试用例的开发与执行
unittest可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果
TestCase
一个TestCase的实例就是一个测试用例。包括测试前准备环境的搭建(setUp),执行 测试代码(run),以及测试后环境的还原(tearDown)。一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证
TestSuite
多个测试用例集合在一起,就是TestSuite
TestRunner
用来执行测试用例的,通过TestRunner类提供的run( )方法来执行test suite/test case
TestLoader
加载测试用例
4. 练习
立即注册
from selenium import webdriver from time import sleep import random import time browser = webdriver.Chrome( ) browser.get('http://127.0.0.1/upload/forum.php') # i = random.randint(1,1000000000) i = time.time( ) username = 'test' str(int(i)) print(username) #定位立即注册 browser.find_element_by_link_text('立即注册').click( ) #输入用户名 browser.find_element_by_id('Zp0luO').send_keys(username) #输入密码 browser.find_element_by_id('g033gz').send_keys('123456') #确认密码 browser.find_element_by_id('w9kNs1').send_keys('123456') #email browser.find_element_by_id('7uxU99').send_keys(username '@qq.com') sleep(5) #点击提交 browser.find_element_by_id('registerformsubmit').click( ) sleep(5) browser.quit( )
test_login.py
import unittest from selenium import webdriver from time import sleep class LoginTestCase(unittest.TestCase): #相当于预置条件,在用例之前执行 def setUp(self): #self 属性 全局变量 self.browser = webdriver.Chrome() self.browser.maximize_window() self.browser.implicitly_wait(5) self.browser.get('http://127.0.0.1/upload/forum.php') #相当于run,使用admin登录,相当于1个测试用例 def test_login_admin(self): #赋值简化 browser = self.browser browser.find_element_by_id('ls_username').send_keys('admin') browser.find_element_by_id('ls_password').send_keys('123456') browser.find_element_by_css_selector('button.pn.vm').click() sleep(3) #获取用户名 username = browser.find_element_by_css_selector('a[title="访问我的空间"]').text self.assertEqual('admin', username) #使用test1登录,第二个测试用例 def test_login_test1(self): # 赋值简化 browser = self.browser browser.find_element_by_id('ls_username').send_keys('test1') browser.find_element_by_id('ls_password').send_keys('123456') browser.find_element_by_css_selector('button.pn.vm').click() sleep(3) # 获取用户名 username = browser.find_element_by_css_selector('a[title="访问我的空间"]').text self.assertEqual('test1', username) #用例执行完之后的清理动作 def tearDown(self): sleep(3) self.browser.quit() if __name__ == '__main__': unittest.main()
test_post.py
import unittest from selenium import webdriver from time import sleep,time from selenium.webdriver import ActionChains class PostTestCase(unittest.TestCase): def setUp(self): self.browser = webdriver.Chrome() self.browser.maximize_window() self.browser.implicitly_wait(5) self.browser.get('http://127.0.0.1/upload/forum.php') #测试用例一定要以test开头 #快速发帖 def test_post1(self): #登录 browser = self.browser browser.find_element_by_id('ls_username').send_keys('admin') browser.find_element_by_id('ls_password').send_keys('123456') browser.find_element_by_css_selector('button.pn.vm').click() #暂停 sleep(1) # 点击默认版块 browser.find_element_by_link_text('默认版块').click() # 输入标题 title = 'test' str(int(time())) browser.find_element_by_id('subject').send_keys(title) # 输入内容 browser.find_element_by_id('fastpostmessage').send_keys(title) # 点击发表 browser.find_element_by_id('fastpostsubmit').click() #获取帖子标题 subject = browser.find_element_by_id('thread_subject').text self.assertEqual(subject,title) #点击发帖按钮后发帖 def test_post2(self): # 登录 browser = self.browser browser.find_element_by_id('ls_username').send_keys('admin') browser.find_element_by_id('ls_password').send_keys('123456') browser.find_element_by_css_selector('button.pn.vm').click() # 暂停 sleep(1) # 点击默认版块 browser.find_element_by_link_text('默认版块').click() # 鼠标移动到发帖按钮 post_button = browser.find_element_by_id('newspecial') post_link = browser.find_element_by_css_selector('ul#newspecial_menu>li>a') ActionChains(browser).move_to_element(post_button).click(post_link).perform() # 输入标题 title = 'test' str(int(time())) browser.find_element_by_id('subject').send_keys(title) # 切换框架 browser.switch_to.frame('e_iframe') # 输入内容 browser.find_element_by_tag_name('body').send_keys(title) # 跳出框架 browser.switch_to.default_content() # 点击发表帖子 browser.find_element_by_id('postsubmit').click() #获取标题 # 获取帖子标题 subject = browser.find_element_by_id('thread_subject').text self.assertEqual(subject, title) def tearDown(self): self.browser.quit()