代码改变世界

基于python的selenium定位和操作页面元素的一些方法

2019-02-14 05:55  shuaiashuai  阅读(2594)  评论(0编辑  收藏  举报

1. 元素定位

1.1 Chrome浏览器怎么获取页面元素

 

 

 

1.2 driver.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.3 driver.find_element_by_xpath()

说明:通过页面的xpath值定位元素

 

1.3.1 Chrome浏览器怎么获取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.4 driver.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.5 driver.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.6 driver.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.7 driver.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.8 find_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.1 send_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.2 click()

说明:点击页面按钮

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定位元素,然后在输入框内输入selenium
key=driver.find_element_by_id("su")
key.click()#定位元素然后点击

 

2.3 clear()

说明:清除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定位元素,然后在输入框内输入selenium
key=driver.find_element_by_id("su")
key.click()#定位元素然后点击
ele.clear()#清除输入空内的内容

2.4 back()

说明:回到前一个页面

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.5 forward()

说明:向前进一个页面

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.6 refresh()

说明:刷新页面

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.7 submit()

说明:提交,只有表单的时候才能用

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定位元素,然后在输入框内输入selenium
ele.submit()

2.8 title

说明:获取页面的标题

 

2.8.1 例子

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
title=driver.title
print(title)

2.9 current_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.10 quit

说明:退出程序运行

2.10.1 例子

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.quit()#退出运行

2.11 Text

说明:获取页面超链接的文本值

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.12 tag_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.13 is_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.14 isDisplayed()

说明:判断元素是否用户可见(有些元素页面不可见,但是存在代码中)

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.15 get_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.16 set_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.17 maximize_window()

说明:窗口最大化

2.17.1 例子

from selenium import webdriver
driver = webdriver.Chrome()
#窗口最大化
driver.maximize_window()

2.18 Size

说明:返回元素的大小

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.1 context_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.2 move_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.3 double_click

说明:双击操作

3.4 drag_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.1 BACK_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.2 SPACE

说明:输入空格

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.3 Keys.CONTROL,"a"

说明:全选输入框内容

同理:Keys.CONTROL,"v" 粘贴内容到输入框

Keys.CONTROL,"x"  剪贴输入框内容

 

 

4.3.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.CONTROL,"a")#ctrl + a ,全选输入框内容

 

4.4 Keys.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.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.2 implicitly_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.3 Sleep休眠方式

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()

定位一组元素

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后多了个s
for i in eles:
    if i.get_attribute('class') == 'input':#如果输入框的class属性等于input就执行下一步
        i.send_keys('selenium')
        time.sleep(2)

 

多表单切换(iframe

selenuim2自动化测试实战基于python语言(p104

多窗口切换

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()

警告对话框处理

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.1 Get_cookie

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
cookie = driver.get_cookies()#h获取页面的cookie
print(cookie)

10.2 add_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获取页面的cookie
for 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获取页面的cookie
for i in cookie:
    print('%s >> %s' % (i['name'],i['value']))
driver.delete_cookie('userName')#删除名字为userName的cookie
cookie2 = driver.get_cookies()
for i in cookie2:
    print('%s >> %s' % (i['name'],i['value']))
driver.quit()

10.4 delete_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获取页面的cookie
for i in cookie:
    print('%s >> %s' % (i['name'],i['value']))
driver.delete_all_cookies()#删除所有的cookie
cookie2 = 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浏览器怎么获取页面元素

 

 

 

1.2 driver.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.3 driver.find_element_by_xpath()

说明:通过页面的xpath值定位元素

 

1.3.1 Chrome浏览器怎么获取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.4 driver.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.5 driver.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.6 driver.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.7 driver.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.8 find_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.1 send_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.2 click()

说明:点击页面按钮

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定位元素,然后在输入框内输入selenium
key=driver.find_element_by_id("su")
key.click()#定位元素然后点击

 

2.3 clear()

说明:清除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定位元素,然后在输入框内输入selenium
key=driver.find_element_by_id("su")
key.click()#定位元素然后点击
ele.clear()#清除输入空内的内容

2.4 back()

说明:回到前一个页面

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.5 forward()

说明:向前进一个页面

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.6 refresh()

说明:刷新页面

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.7 submit()

说明:提交,只有表单的时候才能用

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定位元素,然后在输入框内输入selenium
ele.submit()

2.8 title

说明:获取页面的标题

 

2.8.1 例子

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
title=driver.title
print(title)

2.9 current_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.10 quit

说明:退出程序运行

2.10.1 例子

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.quit()#退出运行

2.11 Text

说明:获取页面超链接的文本值

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.12 tag_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.13 is_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.14 isDisplayed()

说明:判断元素是否用户可见(有些元素页面不可见,但是存在代码中)

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.15 get_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.16 set_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.17 maximize_window()

说明:窗口最大化

2.17.1 例子

from selenium import webdriver
driver = webdriver.Chrome()
#窗口最大化
driver.maximize_window()

2.18 Size

说明:返回元素的大小

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.1 context_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.2 move_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.3 double_click

说明:双击操作

3.4 drag_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.1 BACK_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.2 SPACE

说明:输入空格

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.3 Keys.CONTROL,"a"

说明:全选输入框内容

同理:Keys.CONTROL,"v" 粘贴内容到输入框

Keys.CONTROL,"x"  剪贴输入框内容

 

 

4.3.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.CONTROL,"a")#ctrl + a ,全选输入框内容

 

4.4 Keys.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.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.2 implicitly_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.3 Sleep休眠方式

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()

定位一组元素

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后多了个s
for i in eles:
    if i.get_attribute('class') == 'input':#如果输入框的class属性等于input就执行下一步
        i.send_keys('selenium')
        time.sleep(2)

 

多表单切换(iframe

selenuim2自动化测试实战基于python语言(p104

多窗口切换

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()

警告对话框处理

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.1 Get_cookie

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
cookie = driver.get_cookies()#h获取页面的cookie
print(cookie)

10.2 add_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获取页面的cookie
for 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获取页面的cookie
for i in cookie:
    print('%s >> %s' % (i['name'],i['value']))
driver.delete_cookie('userName')#删除名字为userName的cookie
cookie2 = driver.get_cookies()
for i in cookie2:
    print('%s >> %s' % (i['name'],i['value']))
driver.quit()

10.4 delete_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获取页面的cookie
for i in cookie:
    print('%s >> %s' % (i['name'],i['value']))
driver.delete_all_cookies()#删除所有的cookie
cookie2 = 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)