import time
from selenium import webdriver
driver = webdriver.Chrome()
# driver = webdriver.Firefox() # 火狐驱动
def __init__(self):
self.driver = driver
# 打开浏览器的方法
def Openbrowser(self):
if self.browser_type == 'Firefox':
self.driver = webdriver.Firefox()
elif self.browser_type == 'Chrome':
self.driver = webdriver.Chrome()
elif self.browser_type == 'IE':
self.driver = webdriver.Ie()
elif self.browser_type == '':
self.driver = webdriver.Chrome()
self.driver.maximize_window() # 窗口最大化
def geturl(value):
driver.get(value)
# 浏览器前进操作
def forward():
driver.forward()
# 浏览器后退操作
def back():
driver.back()
def quit():
driver.quit()
# 隐式等待
def wait(seconds):
driver.implicitly_wait(seconds)
# 获取句柄
def get_windows_handles():
driver.window_handles # 获取当前所有窗口的句柄
driver.current_window_handle # 获取当前窗口句柄
driver.switch_to_window(driver.window_handles[1]) # 切换到第二个窗口的句柄
print(driver.window_handles) # 打印句柄
# 切窗口
def Current_handel(self):
# 这时切换到新窗口
all_handles = self.driver.window_handles
for handle in all_handles:
self.driver.switch_to.window(handle)
# 切换到弹窗
def alert_windows():
alert = driver.switch_to_alert()
print(alert.text)
alert.accept()
alert.dismiss()
# 截屏
driver.get_screenshot_as_file("C:\\Users\\你的账户名\\Desktop\\baidu.png")
# 保存图片
def get_windows_img(self):
"""
在这里我们把file_path这个参数写死,直接保存到我们项目根目录的一个文件夹.\Screenshots下
"""
file_path = os.path.dirname(os.path.abspath('.')) + '/screenshots/'
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
screen_name = file_path + rq + '.png'
try:
self.driver.get_screenshot_as_file(screen_name)
except NameError as e:
self.get_windows_img()
# 点击操作
def Click(type, value):
if type == "xpath":
driver.find_element_by_xpath(value).click()
elif type == "class_name":
driver.find_element_by_class_name(value).click()
elif type == "id":
driver.find_element_by_id(value).click()
elif type == "name":
driver.find_element_by_name(value).click()
elif type == "link_text":
driver.find_element_by_link_text(value).click()
elif type == "partial_link_text":
driver.find_element_by_partial_link_text(value).click()
# 输入内容操作
def Input(type, value1, value2):
if type == "xpath":
driver.find_element_by_xpath(value1).send_keys(value2)
elif type == "class_name":
driver.find_element_by_class_name(value1).send_keys(value2)
elif type == "id":
driver.find_element_by_id(value1).send_keys(value2)
elif type == "name":
driver.find_element_by_name(value1).send_keys(value2)
elif type == "link_text":
driver.find_element_by_link_text(value1).send_keys(value2)
elif type == "partial_link_text":
driver.find_element_by_partial_link_text(value1).send_keys(value2)
# 鼠标清除输入框内容
def Clear(self, type, value):
if type == "xpath":
self.driver.find_element_by_xpath(value).clear()
elif type == "id":
self.driver.find_element_by_id(value).clear()
elif type == "name":
self.driver.find_element_by_name(value).clear()
elif type == "link_text":
self.driver.find_element_by_link_text(value).clear()
elif type == "partial_link_text":
self.driver.find_element_by_partial_link_text(value).clear()
# 验证元素是否存在
def Check_element(self, type, value):
if type == "xpath":
self.driver.find_element_by_xpath(value)
elif type == "id":
self.driver.find_element_by_id(value)
elif type == "name":
self.driver.find_element_by_name(value)
elif type == "link_text":
self.driver.find_element_by_link_text(value)
elif type == "partial_link_text":
self.driver.find_element_by_partial_link_text(value)
# 获取子元素
def Select_child_elements(self, type, value1, value2):
if type == "xpath":
Select(self.driver.find_element_by_xpath(value1)).select_by_visible_text(value2)
elif type == "id":
Select(self.driver.find_element_by_id(value1)).select_by_visible_text(value2)
elif type == "name":
Select(self.driver.find_element_by_name(value1)).select_by_visible_text(value2)
elif type == "link_text":
Select(self.driver.find_element_by_link_text(value1)).select_by_visible_text(value2)
elif type == "partial_link_text":
Select(self.driver.find_element_by_partial_link_text(value1)).select_by_visible_text(value2)
# 获取输入框的值
def Get_attribute(self, type, value1, value2):
if type == "xpath":
Value = self.driver.find_element_by_xpath(value1).get_attribute(value2)
return Value
elif type == "name":
Value = self.driver.find_element_by_name(value1).get_attribute(value2)
return Value
elif type == "link_text":
Value = self.driver.find_element_by_link_text(value1).get_attribute(value2)
return Value
elif type == "class_name":
Value = self.driver.find_element_by_class_name(value1).get_attribute(value2)
return Value
elif type == "id":
Value = self.driver.find_element_by_id(value1).get_attribute(value2)
return Value
# 获取下拉框的文本的值
def Get_text(self, type, value):
if type == "xpath":
text = self.driver.find_element_by_xpath(value).text
return text
elif type == "name":
text = self.driver.find_element_by_name(value).text
return text
elif type == "link_text":
text = self.driver.find_element_by_link_text(value).text
return text
elif type == "class_name":
text = self.driver.find_element_by_class_name(value).text
return text
elif type == "id":
text = self.driver.find_element_by_id(value).text
return text
# 显性等待时间
def WebDriverWait(self, MaxTime, Mimtime, value):
element = self.driver.find_element(By.ID, value)
WebDriverWait(self.driver, MaxTime, Mimtime).until(EC.presence_of_element_located(element))
# # 鼠标移动点击机制
def Move_action(self, type, value):
if type == "xpath":
xm = self.driver.find_element_by_xpath(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "id":
xm = self.driver.find_element_by_id(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "name":
xm = self.driver.find_element_by_name(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "link_text":
xm = self.driver.find_element_by_link_text(value)
webdriver.ActionChains(self.driver).click(xm).perform()
# 校验按钮是否为选中状态
def Is_selected(self, type, value):
if type == "id":
self.driver.find_element_by_id(value).is_selected()
elif type == "xpath":
self.driver.find_element_by_xpath(value).is_selected()
elif type == "class_name":
self.driver.find_element_by_class_name(value).is_selected()
elif type == "name":
self.driver.find_element_by_name(value).is_selected()
elif type == "link_text":
# 获取下拉框的文本的值
def Get_text(self, type, value):
if type == "xpath":
text = self.driver.find_element_by_xpath(value).text
return text
elif type == "name":
text = self.driver.find_element_by_name(value).text
return text
elif type == "link_text":
text = self.driver.find_element_by_link_text(value).text
return text
elif type == "class_name":
text = self.driver.find_element_by_class_name(value).text
return text
elif type == "id":
text = self.driver.find_element_by_id(value).text
return text
# 显性等待时间
def WebDriverWait(self, MaxTime, Mimtime, value):
element = self.driver.find_element(By.ID, value)
WebDriverWait(self.driver, MaxTime, Mimtime).until(EC.presence_of_element_located(element))
# # 鼠标移动点击机制
def Move_action(self, type, value):
if type == "xpath":
xm = self.driver.find_element_by_xpath(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "id":
xm = self.driver.find_element_by_id(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "name":
xm = self.driver.find_element_by_name(value)
webdriver.ActionChains(self.driver).click(xm).perform()
elif type == "link_text":
xm = self.driver.find_element_by_link_text(value)
webdriver.ActionChains(self.driver).click(xm).perform()
# 校验按钮是否为选中状态
def Is_selected(self, type, value):
if type == "id":
self.driver.find_element_by_id(value).is_selected()
elif type == "xpath":
self.driver.find_element_by_xpath(value).is_selected()
elif type == "class_name":
self.driver.find_element_by_class_name(value).is_selected()
elif type == "name":
self.driver.find_element_by_name(value).is_selected()
elif type == "link_text":
self.driver.find_element_by_link_text(value).is_selected()
#页面元素拖拽
def elementDragging():
try:
driver = webdriver.Firefox()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
driver.get(url)
driver.implicitly_wait(5)
# 切换到元素所在的frame
driver.switch_to.frame("iframeResult")
# 起点
start = driver.find_element_by_id("draggable")
# 终点
end = driver.find_element_by_id("droppable")
actions = ActionChains(driver)
actions.drag_and_drop(start, end)
# 执行
actions.perform()
except Exception:
print("exception")
finally:
driver.close()
#页面切换
def pageSwitching():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
#获取当前百度界面的窗口句柄
BD_windows = driver.current_window_handle
#打印
print(BD_windows)
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("CSDN")
# 点击
driver.find_element_by_id('su').click()
try:
#打开一个网页
driver.find_element_by_link_text(u'CSDN-专业IT技术社区').click()
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
#打印所有的窗口
print(driver.window_handles)
# 隐示等待,为了等待充分加载好网址
driver.implicitly_wait(5)
#窗口切换到第二个网页
driver.switch_to_window(driver.window_handles[1])
#点击第二个网页的"写博客"按钮
driver.find_element_by_link_text(u'写博客').click()
time.sleep(5)
except Exception:
print("exception")
finally:
driver.quit()
# 鼠标点击事件
# 键盘操作时间
context_click() # 右击
double_click() # 双击
drag_and_drop() # 拖动
move_to_element() # 鼠标拖动
from selenium.webdriver.common.action_chains import ActionChains
brower = webdriver.Firefox
right_click = brower.find_element_by_id("xx")
#对定位到的元素进行右击操作
ActionChains(brower).context_click(right_click).perform()
# 鼠标悬停
move_house = brower.find_element_by_id("xx")
ActionChains(brower).move_to_element(move_house).perform()
brower.find_element_by_id("id").click()
# 鼠标双击
double = brower.find_element_by_id("")
ActionChains(brower).double_click(double).perform()
title = brower.title # 获取title
url = brower.current_url # 获取当前url链接
# 截图
driver.get_screenshot_file(r"D:\test\pythontest\picture.png")
# 滑动浏览器的滚动条。执行js
driver.set_window_size(100,30000) # 浏览器设置高度
driver.excute_script("window.scrollBy(0,3000)")
time.sleep(1)
driver.execute_script("window.scrollBy(0,5000)")
# 使用JS脚本直接操作 id为滚动条的id
# 滚动到底部
js = "var q=document.documentElement.scrollTop=100000"
# 滚动条移动到页面的顶部
js = "var q=document.documentElement.scrollTop=0"
# 页面当中内嵌窗口的滚动条进行操作,先定位到该内嵌窗口
js = "var q=document.getElementById('id').scrollTop=100000" 0
# ie和火狐可以,chrome不行
js = "var q=document.body.scrollTop=0"
driver.execute_script(js)
time.sleep(3)
# 使用js脚本拖动到提定地方,推荐这个方法
target = driver.find_element_by_id(id)
driver.execute_script("arguments[0].scrollIntoView();",target) # 拖动到可见的元素去
# 页面显示进行变通,发送tab键
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id(id).send_keys(Keys.TAB) # 切换tab键.跳到下一个输入框,切换tab,显现元素
# 通过键盘down按键进行下划
driver.find_element_by_id(id).send_keys(Keys.DOWN)
# unittest 框架
#msg:判断不成立时需要反馈的字符串
assertEqual(self, first, second, msg=None)
--判断两个参数相等:first == second
assertNotEqual(self, first, second, msg=None)
--判断两个参数不相等:first != second
assertIn(self, member, container, msg=None)
--判断是字符串是否包含:member in container
assertNotIn(self, member, container, msg=None)
--判断是字符串是否不包含:member not in container
assertTrue(self, expr, msg=None)
--判断是否为真:expr is True
assertFalse(self, expr, msg=None)
--判断是否为假:expr is False
assertIsNone(self, obj, msg=None)
--判断是否为None:obj is None
assertIsNotNone(self, obj, msg=None)
--判断是否不为None:obj is not None
下面是一些常用的键盘事件:
– Keys.BACK_SPACE:回退键(BackSpace)
– Keys.TAB:制表键(Tab)
– Keys.ENTER:回车键(Enter)
– Keys.SHIFT:大小写转换键(Shift)
– Keys.CONTROL:Control键(Ctrl)
– Keys.ALT:ALT键(Alt)
– Keys.ESCAPE:返回键(Esc)
– Keys.SPACE:空格键(Space)
– Keys.PAGE_UP:翻页键上(Page Up)
– Keys.PAGE_DOWN:翻页键下(Page Down)
– Keys.END:行尾键(End)
– Keys.HOME:行首键(Home)
– Keys.LEFT:方向键左(Left)
– Keys.UP:方向键上(Up)
– Keys.RIGHT:方向键右(Right)
– Keys.DOWN:方向键下(Down)
– Keys.INSERT:插入键(Insert)
– DELETE:删除键(Delete)
– NUMPAD0 ~ NUMPAD9:数字键1-9
– F1 ~ F12:F1 - F12键
– (Keys.CONTROL, ‘a’):组合键Control+a,全选
– (Keys.CONTROL, ‘c’):组合键Control+c,复制
– (Keys.CONTROL, ‘x’):组合键Control+x,剪切
– (Keys.CONTROL, ‘v’):组合键Control+v,粘贴
操作键盘事件
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')#输入Ctrl+a全选
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'c')#输入Ctrl+c复制
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')#输入Ctrl+v粘贴
time.sleep(2)
driver.find_element_by_id("kw").send_keys(Keys.ENTER)#输入回车键
推荐一个selenium元素定位的练手网站http://sahitest.com/demo/index.htm