from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains #ActionChains鼠标操作类
from selenium.webdriver.common.keys import Keys #keys类操作
# 打开浏览器:
browser = webdriver.Chrome()
# # 若未配置环境变量:
# path = r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
# browser = webdriver.Chrome(executable_path = path)
# 在指定时间范围等待:
browser.implicitly_wait(30)
# 设置超时
browser.set_page_load_timeout(30)
browser.set_script_timeout(30)
# 打开url:
browser.get(r"http://www.你的网站.com")
# 前进/后退
browser.forward()
browser.back()
# 刷新
browser.refresh()
# 将浏览器最大化
browser.maximize_window()
# 将设置浏览器为宽480,高800显示'
browser.set_window_size(480, 800)
# 关闭浏览器
browser.quit()
# 关闭标签
browser.close()
'''''
获取浏览器窗口相关信息
browser.title # 当前页面标题
browser.name # 浏览器名
browser.current_url # 返回当前页面url
browser.window_handles # 返回当前浏览器的所有窗口
browser.current_window_handle # 返回当前浏览器的窗口句柄
'''
# 跳转到其他标签页
window = browser.window_handles
browser.switch_to_window(window[1])
# 选择窗口
browser.switch_to_window('window_name')
# 截取当前显示的页面并保存
browser.get_screenshot_as_file(r'd:\backup\140591\桌面\首页图片\test.png')
# 定位元素
# 需要先分析源码
text_username = browser.find_element_by_name('username')
text_password = browser.find_element_by_name('password')
form_login = browser.find_element_by_name('formlogin')
# 也可以使用其他方法如xpath,注意转义符
text_username = browser.find_element_by_xpath('//input[@name = \'username\']')
'''''
所有相关方法:
find_element(by='id', value=None)
find_element_by_class_name(name)
find_element_by_css_selector(css_selector)
find_element_by_id(id)
find_element_by_link_text(link_text)
find_element_by_name(name)
find_element_by_partial_link_text(link_text)
find_element_by_tag_name(name)
find_element_by_xpath(xpath)
element后加s则返回一组对象
'''
#-----------------------WebElement相关-----------------------
# 输入值
# send_keys也可以用于上传文件:send_keys('d:/abc.txt')
text_username.send_keys("你的用户名_错误")
text_password.send_keys("你的密码")
# 清空输入框,换成正确的用户名
text_username.clear()
text_username.send_keys("你的用户名_正确")
# 提交表单
form_login.submit()
'''''
相关方法
clear() # 清除元素的内容
send_keys() # 在元素上模拟按键输入
click() # 单击元素
submit() # 提交表单
size() # 返回元素的尺寸
text() # 获取元素的文本
get_attribute(name) # 获得属性值
is_displayed() # 设置该元素是否用户可见
'''
#-------------------alert/confirm/prompt对话框处理-------------------
'''''
switch_to_alert() # 用于获取网页上的警告信息。
text # 返回 alert/confirm/prompt 中的文字信息。
accept() # 点击确认按钮。
dismiss() # 点击取消按钮,如果有的话。
send_keys() # 输入值,这个alert\confirm没有对话框就不能用了,不然会报错。
'''
#-----------------------下拉框处理-----------------------
# 二次定位
# driver.find_element_by_xx('xx').find_element_by_xx('xx').click()
#先定位到下拉框
m=driver.find_element_by_id("ShippingMethod")
#再点击下拉框下的选项
m.find_element_by_xpath("//option[@value='10.69']").click()
#-----------------------cookie处理-----------------------
'''''
get_cookies() # 获得所有cookie信息
get_cookie(name) # 返回特定name 有cookie信息
add_cookie(cookie_dict) # 添加cookie,必须有name 和value 值
delete_cookie(name) # 删除特定(部分)的cookie信息
delete_all_cookies() # 删除所有cookie信息
'''
#-----------------------文件上传-----------------------
# 定位上传按钮,添加本地文件
# driver.find_element_by_xx('xx').send_keys('d:/abc.txt')
driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload_file.txt')
#-----------------------文件下载-----------------------
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir", os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
browser = webdriver.Firefox(firefox_profile=fp)
browser.get("http://pypi.python.org/pypi/selenium")
browser.find_element_by_partial_link_text("selenium-2").click()
#-----------------------Keys类键盘操作-----------------------
from selenium.webdriver.common.keys import Keys
# element.send_keys(...),下同
'''''
send_keys(Keys.BACK_SPACE) # 返回键
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
'''
# ----------------ActionChains类鼠标操作--------------------
from selenium.webdriver.common.action_chains import ActionChains
# 右键单击
ActionChains(browser).context_click(text_username).perform()
# 双击
ActionChains(browser).double_click(text_username).perform()
#执行元素的移动操作
ActionChains(browser).drag_and_drop(text_username, text_password).perform()
'''''
ActionChains 类鼠标操作的常用方法:
context_click() # 右击
double_click() # 双击
drag_and_drop() # 拖动
move_to_element() # 鼠标悬停在一个元素上
click_and_hold() # 按下鼠标左键在一个元素上
'''
# -----------执行JavaScript脚本 --------------
js="var q=document.getElementById(\"user_name\");q.style.border=\"1px solid red\";"
#调用js
browser.execute_script(js)
# eg:
# 将页面滚动条拖到底部
js="var q=document.documentElement.scrollTop=10000"
browser.execute_script(js)
# 隐藏文字信息
driver.execute_script('$("#tooltip").fadeOut();')
# 隐藏按钮:
button = driver.find_element_by_class_name('btn')
driver.execute_script('$(arguments[0]).fadeOut()',button)