WebDriver API 干货

WebDriver API

一,元素定位

(1)id定位

find_element_by_id()

(2)name                                                                                                                                              ind_elemfind_element_by_name()

(3)tage定位

find_element_by_tage_name()

(4)class定位

find_element_by_class_name()

(5)link_text

find_element_by_link_text()

(6)partial link定位

find_element_by_partial_link_text()

(7)Xpath定位

find_element_by_xpath()

绝对路径定位:

find_element_by_xpath("/html/body/div[1]/div[1]/div[1]/div")

元素属性定位:

find_element_by_xpath("//*[@id='toolbar-search-input']")

层级与属性结合:

find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")

使用逻辑运算符:

find_element_by_xpath("//input[@id='kw' and @class='s_ipt']")

使用contains方法:

find_element_by_xpath("//span[contains(@class,'s_ipt_wr')]/input")

text()方法:

find_element_by_xpath("//a[text(),'新闻']")

(8)CSS_selector定位

find_element_by_css_selector()

常用方法:

#刷新当前页面

driver.refresh()

#清除文本

clear() 

#模拟按键输入

send_Keys(value)

#单击元素

click()

#提交表单

submit()

鼠标操作:

#执行ActionChains类中存储的所有行为

perform()                         

#右击

context_click()

#双击

double_click()

#拖动

drag_and_drop()

#鼠标悬停

move_to_element()

键盘操作:

#删除键

send_Keys(Keys.BACK_SPACE)

#空格

send_Keys(Keys.SPACE)

#制表

send_Keys(Keys.TAB)

#回退

send_Keys(Keys.ESCAPE)

#回车

send_Keys(Keys.ENTER)

send_Keys(Keys.CONTROL,'a')

send_Keys(Keys.CONTROL,'x')

send_Keys(Keys.CONTROL,'v')

send_Keys(Keys.CONTROL,'F1')

获取验证信息:

title:用于获取当前页面标题

current_url:用于获取当前页面URL

text:用于获取当前页面文本信息

###########################################################

# print("Before Search=============================")

# 获取浏览器名称

# title=driver.title

# print("title:"+title)

# 获取当前页面url

# now_url=driver.current_url

# print("url:"+now_url)

# driver.find_element_by_id("kw").send_keys("selenium")

# driver.find_element_by_id("su").click()

# print("After Search===============================")

# title = driver.title

# print("title:"+title)

# now_url=driver.current_url

# print("url:"+now_url)

# driver.quit()

#############################################################

显示等待:

等摸个条件成立则继续执行(每隔一段时间检查当前页面元素是否存在),否则达到最大时长抛出超时异常

WebDriverWait()常与until(),until_not()配合使用

#WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver 浏览器驱动

timeout 最长超时时间默认秒

ignored_exceptions 超时后的异常信息,默认抛出NoSuchElementException异常

#########################################################################

#for i in range(10):

#     try:

#         dem = driver.find_element_by_id("kwwwwww")

#         if dem.is_displayed():

#             break

#     except:

#         pass

#     sleep(5)

# else:

#     print("超时异常")

# print(ctime())

# driver.quit()

expected_conditions类提供预期条件判断方法

#########################################################################

title_is  获取当前页面标题是否等于预期结果

title_contains  获取当前页面标题是否包含预期字符串

presence_of_element_located  判断元素是否被加在DOM树中

visibility_of_element_located 判断元素是否可见(可见代表不隐藏)

visibility_of  与上述相同上一个方法是定位,该方法接收的参为定位后的元素

presence_of_all_elements_located  判断是否有一个元素存在DOM树中

text_to_be_present_in_element  判断元素text是否包含预期字符串

text_to_be_present_in_element_value  判断元素value是否包含预期字符串

frame_to_be_available_and_switch_to_it  判断表单是否可以切换过去,可以则返回True

invisibility_of_element_located  判断元素是否不在在DOM树中

element_to_be_clickable  判断元素是否可见&&可以点击

staleness_of  等到元素在DOM树中移除

element_selection_state_to_be  判断元素的选中状态是否符合预期

element__to_be_selected  判断元素是否被选中一般用于下拉列表

element_located_selection_state_to_be  同上,但该方法接受的参数为定位

alert_is_present                               判断页面上是否存在alert            

隐式等待:

driver.implicitly_wait()

implicitly_wait()的参数是时间,单位为秒

隐式等待并不影响脚本执行速度,它会等待页面上的所有元素当脚本执行到某个元素定位时,如果元素存在则继续执行,如果不存在则会轮询超出时间抛出异常。

#################################################################

driver = webdriver.Chrome()

driver.implicitly_wait(10)

driver.get("http://www.baidu.com")

sleep(2)

try:

    print(ctime())

    driver.find_element_by_id("kww22").send_keys('selenium')

except NoSuchFrameException as e:

    print(e)

finally:

    print(ctime())

    driver.quit()

#################################################################

定位一组元素:

定位一组元素与定位一个元素类似。

#################################################################

driver.find_element_by_id("kw").send_keys("selenium")

driver.find_element_by_id("su").click()

texts = driver.find_elements_by_xpath("//div[@tpl='se_com_default']/h3/a")

print(len(texts))

for t in texts:

    print(t.text)

##################################################################

多表单页面切换:

switch_to.frame()

对于frame表单嵌套情况,只能在一个页面上进行识别,无法定位标签内页面的元素

###################################################################

# login_frame =123456

# driver.find_element_by_class_name('iframe[id^="X-URS-iframe"]')

# driver.switch_to(login_frame)

# driver.find_element_by_name("email").send_keys("username")

# driver.find_element_by_name("password").send_keys("password")

# driver.find_element_by_id("dologin").click()

#回到最外层界面

# driver.switch_to.default_content()

# sleep(10)

# driver.quit()

####################################################################

多窗口切换:

driver.current_url()  获得当前窗口句柄

driver.window_handles()  返回所有窗口的句柄到当前会话

driver.switch_to.window()  切换到相应的窗口

driver.switch_to.window(search_windows)

print(driver.title)

警告框处理:

通过switch_to.alert()方法,处理js生成的alert,confirm,prompt

text  返回alert,confirm,prompt中的文字信息

accept()  接受现有警告框

dismiss()  解散现有警告框

send_keys()  在警告框中输入文本

下拉框处理:

Select类  用于定位<select>标签

select_by_value():  通过value值定位下拉选项

select_by_visible_text():  通过text值定位下拉选项

select_by_index():  根据下拉选项的索引进行选择,第一个选项为0,第二个选项为1

上传文件:

普通上传:将本地文件路径作为一个值放到input标签里,通过form表单将这个值提交给服务器

插件上传:基于flash,js,Ajax实现上传功能

通过input标签实现的上传功能,将其看做成一个输入框再通过send.keys()指定文件路径实现上传

import os
from selenium import webdriver
filepath
= os.path.abspath('./Untitled-1.html')
print(filepath)
driver = webdriver.Chrome()
driver.get(filepath)
driver.find_element_by_id("name").send_keys(filepath+'test.txt')

操作cookie:

get_cookies(): 获取所有cookie
get_cookie(name):  返回字典中key为”name”的cookie

add_cookie(cookie_dict):  添加cookie

delete_cookie(name,optionsString):  删除名为OpenString的cookie

delete_all_cookies():  删除所有cookie

driver = webdriver.Chrome()

driver.get("http://www.baidu.com")

cookie = driver.get_cookies()

print(cookie)

driver.add_cookie({'name':'keyy','value':'valuee'})

for cookie in driver.get_cookies():

    print("%s -> %s" %(cookie['name'],cookie['value']))

   

ZFY -> RsHeXgY7um0BB3DPPSm1stzWrFxnalwF:AsNJq9Fg1Iw:C

BAIDUID_BFESS -> DAAC0FC7A871F67BF320E0670CFD7559:FG=1

BA_HECTOR -> a8240g80808421cg81ah3ddm1hm69eo1a

keyy -> valuee

H_PS_PSSID -> 36545_37584_36884_34813_37626_36802_36789_37537_37670_26350_37344_37451

BAIDUID -> DAAC0FC7A871F67BF320E0670CFD7559:FG=1

BIDUPSID -> DAAC0FC7A871F67BDE2CFCC9BFB57531

PSTM -> 1667442133

BD_UPN -> 12314753

BD_HOME -> 1        

调用JS:

有的页面的操作无法通过webdriver api实现,这时需要借助js实现如浏览器滚动条,文本框输入信息也无法通过send.keys()实现。execute_script()来执行js代码

text = "input text"

js = "document.getElementById('id').value='"+text "';"

driver.execute_script(js)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值