非本人编写 原文:https://www.cnblogs.com/jcshuaiashuai/p/10372616.html
1.元素定位
1.1Chrome浏览器怎么获取页面元素
1.2driver.find_element_by_id()
说明:用页面id属性值定位元素
1.2.1例子
from selenium import webdriver
driver=webdriver.Chrome()#通过谷歌浏览器驱动
driver.get('http://www.baidu.com')#打开百度网页
ele=driver.find_element_by_id("kw")#定位到百度页面的输入框
1.3driver.find_element_by_xpath()
说明:通过页面的xpath值定位元素
1.3.1Chrome浏览器怎么获取xpath值
右击鼠标,可以复制xpath值
1.3.2例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
ele=driver.find_element_by_xpath("//*[@id=\"kw\"]")
1.4driver.find_element_by_class_name()
说明:通过页面的class值定位元素
1.4.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
ele=driver.find_element_by_class_name("s_ipt")
1.5driver.find_element_by_name()
说明:以页面的name属性定位元素
1.5.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_name("wd")
1.6driver.find_element_by_link_text()
说明:通过页面上的链接定位元素
1.6.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_link_text("新闻")
1.7driver.find_element_by_partial_link_text()
说明:进行超链接的模糊查询
1.7.1例子
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_partial_link_text("频")
time.sleep(3)
ele.click()
1.8find_element_by_css_selector()
说明:通过css选择器定位
1.8.1例子
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_css_selector("#kw").send_keys("selenium2")
2简单的元素操作
2.1send_keys()
说明:在input的输入框内输入值
2.1.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
ele=driver.find_element_by_id("kw")#定位到元素
ele.send_keys("selenium")#以id定位元素,然后在输入框内输入selenium
2.2click()
说明:点击页面按钮
2.2.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
ele=driver.find_element_by_id("kw")
ele.send_keys("selenium")#以id定位元素,然后在输入框内输入seleniumkey=driver.find_element_by_id("su")
key.click()#定位元素然后点击
2.3clear()
说明:清除input输入框内的输入内容
2.3.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('http://www.baidu.com')
ele=driver.find_element_by_id("kw")
ele.send_keys("selenium")#以id定位元素,然后在输入框内输入seleniumkey=driver.find_element_by_id("su")
key.click()#定位元素然后点击ele.clear()#清除输入空内的内容
2.4back()
说明:回到前一个页面
2.4.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.get("http://www.sina.com")#同一个页面中从百度跳到新浪driver.back()#从新浪返回百度页面
2.5forward()
说明:向前进一个页面
2.5.1例子
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.get("http://www.sina.com")#同一个页面中从百度跳到新浪driver.back()#从新浪返回百度页面driver.forward()#前进一个页面
2.6refresh()
说明:刷新页面
2.6.1例子
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://www.sina.com")
time.sleep(5)#睡5秒driver.refresh()#刷新页面
2.7submit()
说明:提交,只有表单的时候才能用
2.7.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_id("kw")
ele.send_keys("selenium")#以id定位元素,然后在输入框内输入seleniumele.submit()
2.8title
说明:获取页面的标题
2.8.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
title=driver.title
print(title)
2.9current_url
说明:得到当前页面的url
2.9.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
url=driver.current_url
print(url)
2.10quit
说明:退出程序运行
2.10.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.quit()#退出运行
2.11Text
说明:获取页面超链接的文本值
2.11.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_link_text("登录")
text=ele.text
print(text)
2.12tag_name
说明:页面标签类型
2.12.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_link_text("登录")
tag=ele.tag_name#页面标签类型print(tag)
driver.quit()
2.13is_enabled()
说明:页面元素是否可编辑
2.13.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_link_text("登录")
tag=ele.is_enabled()print(tag)
driver.quit()
2.14isDisplayed()
说明:判断元素是否用户可见(有些元素页面不可见,但是存在代码中)
2.14.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_link_text("登录")
tag=ele.is_displayed()print(tag)
driver.quit()
2.15get_attribute()
说明:得到页面属性对应的值
2.15.1例子
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
ele=driver.find_element_by_id("kw")
tag=ele.get_attribute("name")#得到name属性对应的值print(tag)
driver.quit()
2.16set_window_size()
说明:设置浏览器窗口大小
2.16.1例子
_Author_ = 'jc'from selenium import webdriver
driver = webdriver.Chrome()
#打开12306网址driver.get('https://www.12306.cn/index/')
#设置浏览器窗口大小driver.set_window_size(800,800)
#driver.quit()
2.17maximize_window()
说明:窗口最大化
2.17.1例子
from selenium import webdriver
driver = webdriver.Chrome()
#窗口最大化driver.maximize_window()
2.18Size
说明:返回元素的大小
2.18.1例子
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
a = driver.find_element_by_css_selector("#kw").size
print(a)
driver.quit()
3鼠标事件
3.1context_click
说明:右击操作
3.1.1例子
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
right_click = driver.find_element_by_css_selector("#kw")#定位到需要右击的元素
ActionChains(driver).context_click(right_click).perform()#右击,不加perform不显示右击的内容
3.2move_to_element
说明:鼠标悬停
3.2.1例子
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
above = driver.find_element_by_link_text("设置")#定位到鼠标悬停的元素ActionChains(driver).move_to_element(above).perform()
3.3double_click
说明:双击操作
3.4drag_and_drop
说明:元素拖动
3.4.1例子
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
above = driver.find_element_by_link_text("新闻")#定位到原元素target = driver.find_element_by_id("kw")#定位到目标元素ActionChains(driver).drag_and_drop(above,target).perform()#把原元素拖动到目标元素上去
4键盘事件
4.1BACK_SPACE
说明:删除操作
4.1.1例子
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
element = driver.find_element_by_id("kw")
element.send_keys("selenium")
time.sleep(2)
element.send_keys(Keys.BACK_SPACE)#删除操作,删除多输入的m
4.2SPACE
说明:输入空格
4.2.1例子
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
element = driver.find_element_by_id("kw")
element.send_keys("selenium")
element.send_keys(Keys.SPACE)#输入空格element.send_keys("ok")
4.3Keys.CONTROL,"a"
说明:全选输入框内容
同理:Keys.CONTROL,"v" 粘贴内容到输入框
Keys.CONTROL,"x" 剪贴输入框内容
4.3.1例子
from seleniumimport webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
element = driver.find_element_by_id("kw")
element.send_keys("selenium")
element.send_keys(Keys.CONTROL,"a")#ctrl + a ,全选输入框内容
4.4Keys.ENTER
说明:回车操作
4.4.1例子
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
element = driver.find_element_by_id("kw")
element.send_keys("selenium")
driver.find_element_by_id("su").send_keys(Keys.ENTER)#回车
5设置等待
5.1显示等待
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.126.com")
print(time.ctime())
for i in range(10):
try:
el = driver.find_element_by_class_name('j-inputtext dlpwd')
if el.is_displayed():#元素是否存在 break #存在就跳出循环 except:pass time.sleep(1)#不然睡一秒继续找else:
print('time out')#循环完了找不到就打印超时 print(time.ctime())#打印当前时间 driver.close()
5.2implicitly_wait()
说明:implicitly_wait():隐式等待 5当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常 6换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0 7一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢, 8它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。
5.2.1例子
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)#设置了全局查找元素10秒
driver.get("http://www.baidu.com")
print(time.ctime())
try:
driver.find_element_by_id('2kw').send_keys('selenium')
except NoSuchElementException as e: #没有找到元素就抛出没有找到的异常 print(e)
finally:
print(time.ctime())
driver.close()
5.3Sleep休眠方式
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
time.sleep(2)
driver.find_element_by_id('kw').send_keys("postman")
time.sleep(3)
driver.find_element_by_id('su').click()
time.sleep(2)
driver.quit()
6定位一组元素
from selenium import webdriver
import time
driver = webdriver.Chrome()
#设置浏览器窗口大小driver.maximize_window()
#打开12306网址driver.get('https://www.12306.cn/index/')
url2 = driver.current_url
time.sleep(3)
url1 = driver.current_url
#查找登录的链接driver.find_element_by_xpath('//*[@id="J-header-login"]/a[1]').click()
time.sleep(3)
#跳转到账号登录driver.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a').click()
time.sleep(5)
#账号框输入账号eles = driver.find_elements_by_tag_name('input')#找出页面上的所有input输入框,比单个定位element后多了个sfor i in eles:
if i.get_attribute('class') == 'input':#如果输入框的class属性等于input就执行下一步 i.send_keys('selenium')
time.sleep(2)
7多表单切换(iframe)
见selenuim2自动化测试实战基于python语言(p104)
8多窗口切换
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
handle = driver.current_window_handle #获取当前页面(百度搜索页面)的句柄driver.find_element_by_link_text('登录').click()
driver.find_element_by_link_text('立即注册').click()
handles = driver.window_handles#获取当前打开页面所有的句柄for i in handles:
if i == handle: #判断句柄是否为百度搜索页面 driver.switch_to.window(i)#切换到搜索页面 driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__closeBtn"]').click()#关掉打开的小窗口 driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
time.sleep(3)
else:
driver.switch_to.window(i)#切换到注册页面 driver.find_element_by_name('userName').send_keys('jack')
time.sleep(3)
driver.quit()
9警告对话框处理
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
ele = driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(ele).perform()#悬停在设置上time.sleep(2)
driver.find_element_by_link_text('搜索设置').click()
time.sleep(2)
ele = driver.find_element_by_xpath('//*[@id="gxszButton"]/a[1]')#按下保存设置会跳出javascript的警告对话框ele.click()
time.sleep(2)
print(driver.switch_to_alert().text)#打印警告对话框的文字# driver.switch_to_alert().dismiss()#取消警告对话框# driver.switch_to_alert().send_keys('ik')#发送文本到警告对话框driver.switch_to_alert().accept()#接受警告
10操作cookie
10.1Get_cookie
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
cookie = driver.get_cookies()#h获取页面的cookieprint(cookie)
10.2add_cookie
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.add_cookie({'name':'userName','value':'rudy'})#添加一个cookie值cookie = driver.get_cookies()#h获取页面的cookiefor i in cookie:
print('%s >> %s' % (i['name'],i['value']))
driver.quit()
10.3 delete_cookie
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.add_cookie({'name':'userName','value':'rudy'})#添加一个cookie值cookie = driver.get_cookies()#h获取页面的cookiefor i in cookie:
print('%s >> %s' % (i['name'],i['value']))
driver.delete_cookie('userName')#删除名字为userName的cookiecookie2 = driver.get_cookies()
for i in cookie2:
print('%s >> %s' % (i['name'],i['value']))
driver.quit()
10.4delete_all_cookies
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.add_cookie({'name':'userName','value':'rudy'})#添加一个cookie值cookie = driver.get_cookies()#h获取页面的cookiefor i in cookie:
print('%s >> %s' % (i['name'],i['value']))
driver.delete_all_cookies()#删除所有的cookiecookie2 = driver.get_cookies()
for i in cookie2:
print('%s >> %s' % (i['name'],i['value']))
driver.quit()
11调用javascript
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
#设置浏览器窗口大小driver.set_window_size(600,600)
#搜索内容driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(2)
#通过javascript设置浏览器窗口的滚动条位置js='window.scrollTo(100,450);'#执行script语句driver.execute_script(js)
sleep(3)
1. 元素定位
1.1 Chrome浏览器怎么获取页面元素
need-to-insert-img
need-to-insert-img
1.2 driver.find_element_by_id()
说明:用页面id属性值定位元素
need-to-insert-img
1.2.1 例子
from selenium import webdriverdriver=webdriver.Chrome()#通过谷歌浏览器驱动driver.get('http://www.baidu.com')#打开百度网页ele=driver.find_element_by_id("kw")#定位到百度页面的输入框
1.3 driver.find_element_by_xpath()
说明:通过页面的xpath值定位元素
1.3.1 Chrome浏览器怎么获取xpath值
右击鼠标,可以复制xpath值
need-to-insert-img
1.3.2 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get('http://www.baidu.com')ele=driver.find_element_by_xpath("//*[@id=\"kw\"]")
1.4 driver.find_element_by_class_name()
说明:通过页面的class值定位元素
need-to-insert-img
1.4.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get('http://www.baidu.com')ele=driver.find_element_by_class_name("s_ipt")
1.5 driver.find_element_by_name()
说明:以页面的name属性定位元素
need-to-insert-img
1.5.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_name("wd")
1.6 driver.find_element_by_link_text()
说明:通过页面上的链接定位元素
need-to-insert-img
1.6.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_link_text("新闻")
1.7 driver.find_element_by_partial_link_text()
说明:进行超链接的模糊查询
1.7.1 例子
from selenium import webdriverimport timedriver=webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_partial_link_text("频")time.sleep(3)ele.click()
1.8 find_element_by_css_selector()
说明:通过css选择器定位
1.8.1 例子
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.find_element_by_css_selector("#kw").send_keys("selenium2")
2 简单的元素操作
2.1 send_keys()
说明:在input的输入框内输入值
2.1.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get('http://www.baidu.com')ele=driver.find_element_by_id("kw")#定位到元素ele.send_keys("selenium")#以id定位元素,然后在输入框内输入selenium
2.2 click()
说明:点击页面按钮
2.2.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get('http://www.baidu.com')ele=driver.find_element_by_id("kw")ele.send_keys("selenium")#以id定位元素,然后在输入框内输入seleniumkey=driver.find_element_by_id("su")key.click()#定位元素然后点击
2.3 clear()
说明:清除input输入框内的输入内容
2.3.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get('http://www.baidu.com')ele=driver.find_element_by_id("kw")ele.send_keys("selenium")#以id定位元素,然后在输入框内输入seleniumkey=driver.find_element_by_id("su")key.click()#定位元素然后点击ele.clear()#清除输入空内的内容
2.4 back()
说明:回到前一个页面
2.4.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get("http://www.baidu.com")driver.get("http://www.sina.com")#同一个页面中从百度跳到新浪driver.back()#从新浪返回百度页面
2.5 forward()
说明:向前进一个页面
2.5.1 例子
from selenium import webdriverdriver=webdriver.Chrome()driver.get("http://www.baidu.com")driver.get("http://www.sina.com")#同一个页面中从百度跳到新浪driver.back()#从新浪返回百度页面driver.forward()#前进一个页面
2.6 refresh()
说明:刷新页面
2.6.1 例子
from selenium import webdriverimport timedriver=webdriver.Chrome()driver.get("http://www.sina.com")time.sleep(5)#睡5秒driver.refresh()#刷新页面
2.7 submit()
说明:提交,只有表单的时候才能用
2.7.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_id("kw")ele.send_keys("selenium")#以id定位元素,然后在输入框内输入seleniumele.submit()
2.8 title
说明:获取页面的标题
need-to-insert-img
2.8.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")title=driver.titleprint(title)
2.9 current_url
说明:得到当前页面的url
2.9.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")url=driver.current_urlprint(url)
2.10 quit
说明:退出程序运行
2.10.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.quit()#退出运行
2.11 Text
说明:获取页面超链接的文本值
2.11.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_link_text("登录")text=ele.textprint(text)
2.12 tag_name
说明:页面标签类型
need-to-insert-img
2.12.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_link_text("登录")tag=ele.tag_name#页面标签类型print(tag)driver.quit()
2.13 is_enabled()
说明:页面元素是否可编辑
2.13.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_link_text("登录")tag=ele.is_enabled()print(tag)driver.quit()
2.14 isDisplayed()
说明:判断元素是否用户可见(有些元素页面不可见,但是存在代码中)
2.14.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_link_text("登录")tag=ele.is_displayed()print(tag)driver.quit()
2.15 get_attribute()
说明:得到页面属性对应的值
need-to-insert-img
2.15.1 例子
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")ele=driver.find_element_by_id("kw")tag=ele.get_attribute("name")#得到name属性对应的值print(tag)driver.quit()
2.16 set_window_size()
说明:设置浏览器窗口大小
2.16.1 例子
_Author_ = 'jc'from selenium import webdriverdriver = webdriver.Chrome()#打开12306网址driver.get('https://www.12306.cn/index/')#设置浏览器窗口大小driver.set_window_size(800,800)#driver.quit()
2.17 maximize_window()
说明:窗口最大化
2.17.1 例子
from selenium import webdriverdriver = webdriver.Chrome()#窗口最大化driver.maximize_window()
2.18 Size
说明:返回元素的大小
2.18.1 例子
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")a = driver.find_element_by_css_selector("#kw").sizeprint(a)driver.quit()
3 鼠标事件
3.1 context_click
说明:右击操作
3.1.1 例子
from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()driver.get("http://www.baidu.com")right_click = driver.find_element_by_css_selector("#kw")#定位到需要右击的元素ActionChains(driver).context_click(right_click).perform()#右击,不加perform不显示右击的内容
3.2 move_to_element
说明:鼠标悬停
3.2.1 例子
from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()driver.get("http://www.baidu.com")above = driver.find_element_by_link_text("设置")#定位到鼠标悬停的元素ActionChains(driver).move_to_element(above).perform()
3.3 double_click
说明:双击操作
3.4 drag_and_drop
说明:元素拖动
3.4.1 例子
from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Chrome()driver.get("http://www.baidu.com")above = driver.find_element_by_link_text("新闻")#定位到原元素target = driver.find_element_by_id("kw")#定位到目标元素ActionChains(driver).drag_and_drop(above,target).perform()#把原元素拖动到目标元素上去
4 键盘事件
4.1 BACK_SPACE
说明:删除操作
4.1.1 例子
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")element = driver.find_element_by_id("kw")element.send_keys("selenium")time.sleep(2)element.send_keys(Keys.BACK_SPACE)#删除操作,删除多输入的m
4.2 SPACE
说明:输入空格
4.2.1 例子
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()driver.get("http://www.baidu.com")element = driver.find_element_by_id("kw")element.send_keys("selenium")element.send_keys(Keys.SPACE)#输入空格element.send_keys("ok")
4.3 Keys.CONTROL,"a"
说明:全选输入框内容
同理:Keys.CONTROL,"v" 粘贴内容到输入框
Keys.CONTROL,"x" 剪贴输入框内容
4.3.1 例子
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()driver.get("http://www.baidu.com")element = driver.find_element_by_id("kw")element.send_keys("selenium")element.send_keys(Keys.CONTROL,"a")#ctrl + a ,全选输入框内容
4.4 Keys.ENTER
说明:回车操作
4.4.1 例子
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()driver.get("http://www.baidu.com")element = driver.find_element_by_id("kw")element.send_keys("selenium")driver.find_element_by_id("su").send_keys(Keys.ENTER)#回车
5 设置等待
5.1 显示等待
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get("http://www.126.com")print(time.ctime())for i in range(10):
try: el = driver.find_element_by_class_name('j-inputtext dlpwd') if el.is_displayed():#元素是否存在 break #存在就跳出循环 except:pass time.sleep(1)#不然睡一秒继续找else: print('time out')#循环完了找不到就打印超时 print(time.ctime())#打印当前时间 driver.close()
5.2 implicitly_wait()
说明:implicitly_wait():隐式等待 5 当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常 6 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0 7 一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢, 8 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。
5.2.1 例子
from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionimport timedriver = webdriver.Chrome()driver.implicitly_wait(10)#设置了全局查找元素10秒driver.get("http://www.baidu.com")print(time.ctime())try: driver.find_element_by_id('2kw').send_keys('selenium')except NoSuchElementException as e: #没有找到元素就抛出没有找到的异常 print(e)finally: print(time.ctime()) driver.close()
5.3 Sleep休眠方式
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.implicitly_wait(10)driver.get("http://www.baidu.com")time.sleep(2)driver.find_element_by_id('kw').send_keys("postman")time.sleep(3)driver.find_element_by_id('su').click()time.sleep(2)driver.quit()
6 定位一组元素
from selenium import webdriverimport timedriver = webdriver.Chrome()#设置浏览器窗口大小driver.maximize_window()#打开12306网址driver.get('https://www.12306.cn/index/')url2 = driver.current_urltime.sleep(3)url1 = driver.current_url#查找登录的链接driver.find_element_by_xpath('//*[@id="J-header-login"]/a[1]').click()time.sleep(3)#跳转到账号登录driver.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a').click()time.sleep(5)#账号框输入账号eles = driver.find_elements_by_tag_name('input')#找出页面上的所有input输入框,比单个定位element后多了个sfor i in eles: if i.get_attribute('class') == 'input':#如果输入框的class属性等于input就执行下一步 i.send_keys('selenium') time.sleep(2)
7 多表单切换(iframe)
见selenuim2自动化测试实战基于python语言(p104)
8 多窗口切换
from selenium import webdriverimport timedriver = webdriver.Chrome()driver.implicitly_wait(10)driver.get("http://www.baidu.com")handle = driver.current_window_handle #获取当前页面(百度搜索页面)的句柄driver.find_element_by_link_text('登录').click()driver.find_element_by_link_text('立即注册').click()handles = driver.window_handles#获取当前打开页面所有的句柄for i in handles: if i == handle: #判断句柄是否为百度搜索页面 driver.switch_to.window(i)#切换到搜索页面 driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__closeBtn"]').click()#关掉打开的小窗口 driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() time.sleep(3) else: driver.switch_to.window(i)#切换到注册页面 driver.find_element_by_name('userName').send_keys('jack')time.sleep(3)driver.quit()
9 警告对话框处理
from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsimport timedriver = webdriver.Chrome()driver.get("http://www.baidu.com")ele = driver.find_element_by_link_text('设置')ActionChains(driver).move_to_element(ele).perform()#悬停在设置上time.sleep(2)driver.find_element_by_link_text('搜索设置').click()time.sleep(2)ele = driver.find_element_by_xpath('//*[@id="gxszButton"]/a[1]')#按下保存设置会跳出javascript的警告对话框ele.click()time.sleep(2)print(driver.switch_to_alert().text)#打印警告对话框的文字# driver.switch_to_alert().dismiss()#取消警告对话框# driver.switch_to_alert().send_keys('ik')#发送文本到警告对话框driver.switch_to_alert().accept()#接受警告
10 操作cookie
10.1 Get_cookie
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")cookie = driver.get_cookies()#h获取页面的cookieprint(cookie)
10.2 add_cookie
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.add_cookie({'name':'userName','value':'rudy'})#添加一个cookie值cookie = driver.get_cookies()#h获取页面的cookiefor i in cookie: print('%s >> %s' % (i['name'],i['value']))driver.quit()
10.3 delete_cookie
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.add_cookie({'name':'userName','value':'rudy'})#添加一个cookie值cookie = driver.get_cookies()#h获取页面的cookiefor i in cookie: print('%s >> %s' % (i['name'],i['value']))driver.delete_cookie('userName')#删除名字为userName的cookiecookie2 = driver.get_cookies()for i in cookie2: print('%s >> %s' % (i['name'],i['value']))driver.quit()
10.4 delete_all_cookies
from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.add_cookie({'name':'userName','value':'rudy'})#添加一个cookie值cookie = driver.get_cookies()#h获取页面的cookiefor i in cookie: print('%s >> %s' % (i['name'],i['value']))driver.delete_all_cookies()#删除所有的cookiecookie2 = driver.get_cookies()for i in cookie2: print('%s >> %s' % (i['name'],i['value']))driver.quit()
11 调用javascript
from selenium import webdriverfrom time import sleepdriver = webdriver.Chrome()driver.get('http://www.baidu.com')#设置浏览器窗口大小driver.set_window_size(600,600)#搜索内容driver.find_element_by_id('kw').send_keys('selenium')driver.find_element_by_id('su').click()sleep(2)#通过javascript设置浏览器窗口的滚动条位置js='window.scrollTo(100,450);'#执行script语句driver.execute_script(js)sleep(3)