SELENIUM 2 自动化测试实战
2018-04-02 本文已影响35人
两分与桥
虫师写的基于 python 语言的这本 selenium 还是很不错的
- 控制浏览器大小
#-*- coding:utf-8 -*-
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path=(r'C:\Users\libai\AppData\Local\Google\Chrome\Application\chromedriver.exe'))
#下载的 chromdriver.exe 的路径
driver.get("http://www.zhbit.com/")
x = 480
y = 800
print("设置浏览器宽%d,高%d显示" %(x, y))
driver.set_window_size(x,y)
time.sleep(8)
print("设置全屏显示")
driver.maximize_window()
time.sleep(8)
driver.find_element_by_id("keyboard").send_keys("Selenium2")
driver.find_element_by_name("Submit22").click()
time.sleep(5)
driver.quit()
- 控制浏览器的前进后退
#-*- coding:utf-8 -*-
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path=(r'C:\Users\libai\AppData\Local\Google\Chrome\Application\chromedriver.exe'))
print("设置全屏显示")
driver.maximize_window()
driver.get("http://www.zhbit.com/")
time.sleep(8)
print("跳转")
driver.get("http://www.zhbit.com/jgsz/wzdh.html")
time.sleep(8)
print("back")
driver.back()
time.sleep(8)
print("forward")
driver.forward()
time.sleep(8)
driver.quit()
- 刷新当前页面,相当于 F5
driver.refresh()
- clear() 清除文本
send_keys(*value) 模拟按键输入
click() 单击元素
submit() 用于提交表单,例如在搜索框输入关键字之后的“回车”操作
#-*- coding:utf-8 -*-
from selenium import webdriver
import time
driver = webdriver.Chrome(executable_path=(r'C:\Users\libai\AppData\Local\Google\Chrome\Application\chromedriver.exe'))
print("设置全屏显示")
driver.maximize_window()
driver.get("http://www.zhbit.com/")
driver.find_element_by_id("keyboard").send_keys("Selenium2")
driver.find_element_by_id("keyboard").submit()
#与点击提交效果相同,
#driver.find_element_by_name("Submit22").click()
time.sleep(5)
driver.quit()
-
size 返回元素的尺寸
text 获取元素的文本
get_attribute(name) 获取属性值
is_displayed() 该元素对用户是否可见 -
鼠标事件,由 ActionChains 类提供鼠标操作
perform() 执行所有 ActionChains 中存储的行为
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 鼠标悬停
#-*- coding:utf-8 -*-
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
print("设置全屏显示")
driver.maximize_window()
driver.get("https://www.baidu.com/")
above = driver.find_element_by_css_selector("#u1 > a.pf")
ActionChains(driver).move_to_element(above).perform()
time.sleep(5)
driver.quit()
- 键盘事件 send_Keys()
#-*- coding:utf-8 -*-
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
print("设置全屏显示")
driver.maximize_window()
driver.get("http://e.zhbit.com/jsxsd/")
print("before login=====================")
print(driver.title)
print(driver.current_url)
time.sleep(8)
print("logining")
driver.find_element_by_id("userAccount").clear()
driver.find_element_by_id("userAccount").send_keys("admin")
driver.find_element_by_id("userPassword").clear()
driver.find_element_by_id("userPassword").send_keys("password")
driver.find_element_by_id("btnSubmit").click()
time.sleep(5)
print("login end")
print(driver.title)
print(driver.current_url)
print(driver.find_element_by_id("Top1_divLoginName").text)
time.sleep(5)
print("out of login")
driver.find_element_by_css_selector("#Top1_LExit > a").click
time.sleep(5)
driver.quit()
- 显式等待
element = WebDriverWait(driver, 5 , 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
#等待,每0.5秒检测一次,超时5s,,until 用presence_of_element_located 检测元素是否存在
element.send_keys("selenium")
隐式等待
#implicitly_wait() 默认单位为秒,它并不针对页面上的某一元素进行等待
#当脚本执行到某个元素定位时,如果元素可以定位,则继续执行,
#如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到
#假设在第6秒定位到了元素则继续执行,超时则抛出异常
driver.implicitly_wait(10)
driver.get("http://e.zhbit.com/jsxsd/")
-
定位一组元素
用 for 循环取出一组元素
pop(0) 获得一组元素中的第一个
pop(1) 获得一组元素中的第二个
pop() 默认获得最后一个 -
切换到嵌套页面
switch_to.frame() #切换到嵌套页面
#切换到iframe(id = "if")
driver.switch_to.frame("if")
driver.switch_to.default_content()
#跳出当前表单
11.多窗口切换 switch_to_window()
-
警告框处理
-
上传处理
-
下载文件
-
操作cookie
-
调用JavaScript
控制滚动条
向页面中的 textarea 文本框输入内容 -
处理 HTML5 的视频播放
-
窗口截图
-
关闭其中某个窗口,close()
-
python 多线程
thread 不支持守护线程,当主线程退出时,所有的子线程不管他们是否还在工作,都会被强行退出
有时候我们并不希望发生这种行为,就引入了守护线程
threading 支持守护线程
import time
import threading
def music(x, y):
print("music begin")
time.sleep(5)
print("music end %d" %(x+y))
def movie(x, y):
print("movie begin")
time.sleep(10)
print("movie end %d" %(x*y))
#创建线程数组
threads = []
#创建线程t1,并添加到线程数组
t1 = threading.Thread(target=music, args=(4,5))
threads.append(t1)
#创建线程t2,并添加到线程数组
t2 = threading.Thread(target=movie, args=(4,5))
threads.append(t2)
if __name__ == "__main__":
#启动线程
print(time.ctime())
for t in threads:
t.start()
#守护线程
for t in threads:
t.join()
print(time.ctime())
print('all end:')
21.多进程 multiprocessing
import time
import multiprocessing
def music(x, y):
print("music begin")
time.sleep(5)
print("music end %d" %(x+y))
def movie(x, y):
print("movie begin")
time.sleep(10)
print("movie end %d" %(x*y))
#创建线程数组
threads = []
#创建进程
t1 = multiprocessing.Process(target=music, args=(4,5))
threads.append(t1)
#创建进程
t2 = multiprocessing.Process(target=movie, args=(4,5))
threads.append(t2)
if __name__ == "__main__":
#启动线程
print(time.ctime())
for t in threads:
t.start()
#守护线程
for t in threads:
t.join()
print(time.ctime())
print('all end:')
22.Pipe, Queue进程间通信
Pipe是双向的
import multiprocessing
def proc1(pipe):
pipe.send('hello')
print('proc1 rec:', pipe.recv())
def proc2(pipe):
print('proc2 rec:', pipe.recv())
pipe.send('hello, too')
if __name__ == '__main__':
multiprocessing.freeze_support()
pipe = multiprocessing.Pipe()
p1 = multiprocessing.Process(target=proc1, args=[pipe[0],])
p2 = multiprocessing.Process(target=proc2, args=[pipe[1],])
p1.start()
p2.start()
p1.join()
p2.join()
看到最后,发现这本书实际上并不是讲 selenium webdriver 的,其实讲的是测试方面,很多看不是很明白------------,好了,这本书就到这里过吧
看别的去了