https://www.cnblogs.com/alex3714/articles/5760582.html 24种设计模式
一、认识selenium
1.selenium 基于ui的自动化测试 webdriver api
大赛指定的是chrome65 selenium==2.48.0 python3.5
二、开始使用
鼠标操作
(from selenium.webdriver.common.action_chains import ActionChains)
在做自动化测试的时候,经常会遇到这种情况,某个页面元素,你必须要把鼠标移动到上面才能显示出元素。那么这种情况,我们怎么处理呢?,selenium 给我们提供了一个类来处理这类事件 —— ActionChains。
ActionChains 可以对需要模拟鼠标操作才能进行的情况,比如 单击、双击、点击鼠标右键、拖拽 等等进行操作。
ActionChains方法列表:
click(on_element=None) ——单击鼠标左键
click_and_hold(on_element=None) ——点击鼠标左键,不松开
context_click(on_element=None) ——点击鼠标右键
double_click(on_element=None) ——双击鼠标左键
drag_and_drop(source, target) ——拖拽到某个元素然后松开
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
key_down(value, element=None) ——按下某个键盘上的键
key_up(value, element=None) ——松开某个键
move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标
move_to_element(to_element) ——鼠标移动到某个元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置
perform() ——执行链中的所有动作
release(on_element=None) ——在某个元素位置松开鼠标左键
send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
键盘事件( )
1. sleep(second) :强制等待,封装在time中的sleep类中
2. WebDricerWait(driver,timeout,poll_frequency,ignored_exceptions)
显式等待,当找到要校验的元素后就继续执行下面的程序,非强制等待
driver:浏览器驱动
timeout:最长超时,秒为单位
poll_frequency:检测间隔(步长)时间,默认为0.5s
ignored_exceptions:超时后的异常信息,默认情况下抛出 NoSuchElementException
implicicitly(second)隐式等待,设置最长等待时长,如果在特定时间内未找到元素则抛出 NoSuchElementException异常
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Firefox()
driver.implicitly_wait(10) #webdriverapi中的
submit()
driver.find_element_by_css_selector(“input.logging”).submit() # 用于对信息进行提交,
也可以使用click()进行代替,submit()要求提交对象是一个表单,click( ) 更强调事件的独立性
下拉框
两种方法任选其一,都是指向同一个文件
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.select import Select
实例化一个Select类的对象
selector = Select(driver.find_element_by_id("selectdemo"))
下面三种方法用于选择"篮球运动员"
selector.select_by_index("2") # 通过index进行选择,index从0开始
selector.select_by_value("210103") # 通过value属性值进行选择
selector.select_by_visible_text("篮球运动员") # 通过标签显示的text进行选择
滚动条
js=“var q=document.documentElement.scrollTop=10000”
driver.execute_script(js)
窗口切换
第一种方法:
使用场景:
打开多个窗口,需要定位到新打开的窗口
使用方法:
#获取打开的多个窗口句柄
windows=driver.window_handles
#切换到当前最新打开的窗口
driver.switch_to(windows[-1])
重点 自动截图 :driver.save_screenshot(r’photo.png’)
查看谷歌浏览器的版本,后续下载相应版本的驱动器
将下载好的谷歌驱动 .exe文件拖拽到所建工程文件夹中
代码:
滑动
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time : 2019/8/26 10:20
# @Author : Fan
# @File : se_demo.py
# @Software: PyCharm
from selenium import webdriver
from selenium.webdriver.common.keys import Keys #
from selenium.webdriver.common.action_chains import ActionChains
import time
driver=webdriver.Chrome("chromedriver.exe")
driver.maximize_window()
driver.get("https://pages.kaola.com/pages/activity/kaola123.shtml?tag=cf5274c0ff456df92e385fabd1c58301&__da_Vu0MCs_OVtqR9&fc=u1.c6897.g6898.k1445920816175.pz")
driver.find_element_by_xpath('//*[@id="topSearchInput"]').send_keys("BB霜")
action_enter=ActionChains(driver)
action_enter.send_keys(Keys.ENTER).perform()
a=0
for i in range(1,11):
js="var q=document.documentElement.scrollTop={}".format(a)
a+=800
driver.execute_script(js)
time.sleep(1.5)
#driver.find_element_by_link_text('珂莱欧').click()
result=driver.find_elements_by_xpath('//*[@id="result"]/li/div/a/div/img')
for i in result:
print(i.get_attribute("src"))
driver.quit()
翻页
from selenium import webdriver #这是准备浏览器驱动
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome(executable_path="chromedriver.exe")
driver.maximize_window()
driver.get("https://www.kaola.com/")
driver.find_element_by_xpath('//*[@id="topSearchInput"]').send_keys("BB霜")
action_enter = ActionChains(driver)
action_enter.send_keys(Keys.ENTER).perform()
#driver.find_element_by_link_text("珂莱欧").click()
def func():
top_a = 0 #顶部滑动,初始高度0
for i in range(1,11):
js = "var q=document.documentElement.scrollTop=%d" % top_a
top_a +=800
driver.execute_script(js)
time.sleep(1.5)
results = driver.find_elements_by_xpath('//*[@id="result"]/li/div/a/div/img')
for i in results:
print(i.get_attribute("src"))
for i in range(5):
print("第%d" % i)
func()
time.sleep(3)
driver.find_element_by_xpath('//*[@id="resultwrap"]/div[3]/a[7]').click()
driver.quit()