selenium知识体系(思维导图/脑图)

基于python语言的selenium知识体系

1 弹出框

1.1 类型

alert   警告框
confirm  确认框 
prompt   提示框

1.2 处理步骤 以alert为例,其他雷同

步骤一: al = driver.switch_to.alert 切到弹出框,返回弹出框对象
步骤二:最后都必须同意或取消 
		al.text   获取弹出框文本信息
		al.accept()   同意 
		al.dismiss()   取消

2 浏览器常用操作

driver.maximize_window()     最大化浏览器
driver.set_window_size(w,h)   设置浏览器大小,单位为像素
driver.set_window_position(x,y)   设置浏览器位置
driver.back()   后退
driver.forward()  前进
driver.refresh()  刷新
driver.close()   关闭当前主窗口(默认启动的界面为主窗口)
driver.quit()   关闭由driver对象启动的所有窗口
driver.title   获取当前页面的title信息
driver.current_rul   获取当前页面的url信息
driver.get_screenshot_as_file("文件路径/{}.png".formate(time.strftime("%Y_%m_%d %H_%M_%S"))) 截屏,并通过时间戳命名文件

3 select下拉框

3.1 分两步定位并选中

driver.find_element_by_id("id").find_element_by_xpath("//option[@value='xx']").click() 选中某元素

3.2 直接定位并选中

driver.find_element_by_xpath("//*[@id='id']/option[n]").click() 下标n从0开始

3.3 通过Select模块定位及操做

Select(下拉框元素).select_by_index(n).click() 通过下标定位,n从0开始,并选中
Select(下拉框元素).select_by_value("xx").click() 通过value属性值定位,并选中
Select(下拉框元素).select_by_visible_text("xx").click() 通过显示的文本定位,并选中
Select(下拉框元素).deselect_all() 取消所有选中的项
Select(下拉框元素).deselect_by_index(n) 取消选中的对应index的选项
Select(下拉框元素).deselect_by_value("xx") 取消选中的对应value的选项
Select(下拉框元素).deselect_by_visible_text("xx") 取消选中的对应文本的选项
Select(下拉框元素).first_selected_option() 返回第一个选中的选项
Select(下拉框元素).all_selected_option() 返回所有选中的选项

4 元素定位的8种方式

① driver.find_element_by_css_selector("css_selector")

 - driver.find_element_by_css_selector("#id") id选择器
 - driver.find_element_by_css_selector(".class_name") class选择器
 - driver.find_element_by_css_selector("tag_name") 元素选择器
 - driver.find_element_by_css_selector("[属性=‘属性值’]") 属性选择器
 - driver.find_element_by_css_selector("标签1>标签2")
 - driver.find_element_by_css_selector("标签1 标签2") 层级选择器
 
② driver.find_element_by_XPath("XPath")
 - driver.find_element_by_Xpath("/htmlXpath/body/form/div/fieldset/p[2]/input") 绝对路径: 标签相同时,用【n】表示第n个标签
 - driver.find_element_by_Xpath("//input ")  相对路径
 - driver.find_element_by_Xpath("//input[@id=‘passwordA’] ")    路径结合属性:在XPath中,所有的属性必须使用@符号修饰
 - driver.find_element_by_Xpath("//标签名[@属性1=‘属性值’ and @属性2=‘属性值’]")   路径结合多个属性
 - driver.find_element_by_Xpath("//父级标签名[@父级属性="属性值"]/子级标签名")   路径结合层级
 - 	XPath-延申: 
 //*[text()="XXX"] 文本内容为XXX的元素
 //*[contains(@attribute,"XXX")] 属性中含有XXX的元素  
 //*[starts-with(@attribute,"XXX")] 属性以XXX开头的元素 

③ driver.find_element_by_id("id")

④ driver.find_element_by_name("name")

⑤ driver.find_element_by_class_name("class_name")

⑥ driver.find_element_by_link_text("link_text")

⑦ driver.find_element_by_partial_link_text("partial_link_text")

⑧ driver.find_element_by_tag_name("tag_name")

5 frame表单、窗口切换

5.1 frame表单

driver.switch_to.frame("name 或 id 或 element") 切到iframe表单页面
driver.switch_to.default_content() 切回默认的主页面

5.2 多窗口切换

driver.current_window_handle 获取当前主窗口句柄,返回值为字符串
driver.window_handles 获取所有由driver启动的所有窗口句柄,返回值为字符串列表
driver.switch_to.window(目标窗口句柄) 切换窗口

6 cookie处理

driver.get_cookies() 获取所有的cookie
driver.get_cookie(name) 获取指定name的cookie
driver.delete_all_cookies() 清除所有cookie
driver.delete_cookie(name) 清除指定name的cookie
driver.add_cookie(cookie_dict) 添加cookie,可用于绕过验证码登录

7 获取元素信息

element.text   获取元素文本
elememt.size    获取元素大小
element.tag_name   获取元素标签名
element.get_attribute(属性名)    获取元素属性
element.is_enabled()    判断元素是否可用
element.is_selected()    判断元素是否被选中
element.is_display()   判断元素是否可见

8 JS处理

8.1 滚动条

js = "window.scrollTo(x,y)";driver.execute_script(js)     x:左边距 y:右边距 单位为像素 
js = "window.scrollTo(0,document.body.scrollHeight)";  driver.execute_script(js) 滚动到底部
js = "window.scrollTo(0,0)";  driver.execute_script(js) 滚动到顶部

8.2 聚焦元素

driver.excute_script("arguments[0].scrollIntoView();", elemet)

8.3 播放视频

driver.excute_script("arguments[0].play();", elemet)

9 元素等待

9.1 强制等待 针对单个元素生效

sleep(等待时间 s)

9.2 隐式等待 针对所有元素生效

driver.implicitly_wait(time_to_wait)  最长等待time_to_wait秒

9.3 显示等待 针对单个元素生效

WebDriverWait(driver,timeout=10,poll_frequency=0.5).until(lambda x:x.find_element_by_css_selector("#user"),"自定义超时提示信息") 
1)timeout 超时时间 
2)poll_frequency 访问频率,默认0.5s找一次元素 
3)返回值为一个元素

10 Python自带的UnitTest框架的原生断言

断言方法封装在unittest.TestCase类中,继承后可调用
self.assertTrue(expr, msg=None) 验证expr是否为True
self.assertFalse(expr, msg=None) 验证expr是否为False
self.assertEqual(expected, actual,msg=None) 验证expected是否等于actual
assertNotEqual(first, second,msg=None) 验证first是否不等于 second
self.assertIn(member, container,msg=None) 验证member是否包含于 container
self.assertNotIn(member, container,msg=None) 验证member是否不包含于 container
assertIsNone(obj, msg=None) 验证obj是否为None
assertNotNone(obj, msg=None) 验证obj是否不为None

11 鼠标和键盘操作

11.1 鼠标简单操作

element.click()   点击鼠标左键
element.clear()    清空输入框
element.send_keys("XXXX")      输入XXXX

11.2 鼠标事件

方法封装在 ActionChains 类中
ActionChains(driver).context_click(element).perform()   右击鼠标
ActionChains(driver).double_click(element).perform()  双击鼠标
ActionChains(driver).move_to_element(element).perform()  鼠标悬停
ActionChains(driver).drag_and_drop(source_element, target_element).perform() 
	ActionChains(driver).drag_and_drop_by_offset(element, xoffset=XX, yoffset=YY).perform()  拖拽

11.3 键盘操作

方法封装在Keys类中
element.send_keys(Keys.F1)      按下F1键(F1-F12自行替换)
element.send_keys(Keys.TAB)    Tab键
element.send_keys(Keys.TAB)       Enter键
element.send_keys(Keys.CONTROL, "c")      复制:Ctrl+c键
element.send_keys(Keys.CONTROL, "v")   粘贴:Ctrl+v键
element.send_keys(Keys.CONTROL, "a")      全选:Ctrl+a键
element.send_keys(Keys.CONTROL, "x")         剪切:Ctrl+x键

12 selenium常见异常

NoSuchElementException     没有找到元素
NoSuchFrameException     没有找到frame    
NoSuchWindowException    没有找到窗口句柄  
NoSuchAttributeException     属性错误   
NoAlertPresentException      没有找到alert弹出框   
IementNotVisibleException       元素不可见 
ElementNotSelectableException      元素没有被选中   
TimeoutException      查找元素超时    

脑图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/vale_/article/details/106262100