WebDriver API学习笔记

来源:互联网 发布:知乎 汉景帝杀吴太子 编辑:程序博客网 时间:2024/06/08 12:36

一、8种定位元素方法

find_element_by_id(" ")---对应id

find_element_by_class_name(" ")---对应class

find_element_by_name(" ")---对应name

find_element_by_link_text(" ")---对应链接文本

find_element_by_partial_link_text(" ")---对应部分链接文本,针对较长文本,可以取部分文本

find_element_by_tag_name(" ")---对应标签名,例如input ,div这种

find_element_by_xpath(" ")---对应元素的xpath路径

find_element_by_css_selector(" ")

find_element_by_id("kw")=find_element(By.ID,"kw")

xpath的几种定位方法:

find_element_by_xpath("//*[@id="kw"]") //表示某个层级下,*代表任何标签下,kw是id属性值

find_element_by_xpath("//input[@id="kw"]") 标签最好写死,这样定位更准确

find_element_by_xpath("//input[@name="kw"]") 

find_element_by_xpath("//input[@class="kw"]") 

find_element_by_xpath("//input[@value="kw"]") 

例如:

<form id="form" class="fm" name="f" action="/s">

    <span class="bg s_ipt_wr quickdelete-wrap">

    <span class="bg s_ipt">

        <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off"/>

        <input id="kw2" class="s_ipt2" name="wd" value="" maxlength="255" autocomplete="off"/>

find_element_by_xpath("//form[@id=’form‘]/span[2]/input[2]")

或者

find_element_by_xpath("//form[@id=’form‘]/span[@class="bg s_ipt"]/input[@kw=" kw2"]")

或者

find_element_by_xpath("//input[@id="kw2" and @class="s_ipt2]"")

css的几种定位方法:

find_element_by_css_selector("#kw")  #表示id---定位id

find_element_by_css_selector("[name=wd]")或者find_element_by_css_selector("[name="wd"]") ---定位name

find_element_by_css_selector(".s_ipt") .表示class----定位class

find_element_by_css_selector(" span.bg.s_ipt>input"#kw"")

find_element_by_css_selector("form#form>span[2]>input[2]")

注意:不管用什么定位方式,它一定是唯一的标识一个元素,不同的页面的没有关系,在同一个页面不能重复

二、WebDriver常用方法:

driver=webdriver.Chorm()

driver.get("http://www.baidu.com")  用谷歌浏览器打开百度首页

driver.set_window_size(400,500) 设置浏览器宽度400,高度500

driver.maximize.window() 设置浏览器全屏显示

driver.back() 后退

driver.forward() 前进

driver.refresh() 刷新页面

claer()清除文本

send_keys(" ") 模拟按键输入

click()    单击元素

submit() 用于提交表单,例如,在搜索框输入关键字之后的回车操作,就可以通过submit()方法模拟

size 返回元素的尺寸

text 获取元素的文本--断言常用方法

get_attribute(name) 获得属性值

is_displayed() 设置元素是否用户可见

鼠标事件:

perform() 执行所有ActionChains中存储的行为

context_click() 右击

double_click() 双击

drag_and_drop()拖动

move_to_element() 鼠标悬停

要先导入ActionChains类

from selenium.webdriver.common.action_chains import ActionChains

above=driver.find_element_by_link_text("设置")

ActionChains(driver).move_to_element(above).perform()

键盘事件:

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)

获得验证信息:主要用于做断言

driver.current_url 获取当前页面URL

driver.title获取当前页面的标题

driver.text获取搜索条目的文本信息


显示等待:针对某个元素去等待的,WebDriver等待某个成立时继续执行,否则在达到最大时长时抛出异常

第一种方法:

from selenium.webdriver.support  import  expected_conditions as EC

element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((BY.ID,"kw"))

第二种方法:

for i in range(60):    if "selenium_百度搜索" in dr.title:        break    else:        time.sleep(0.5)else:    raise NameError("time out")

隐式等待,是针对当前脚本的所有元素的等待

driver.implicitly_wait(10)

单位时间为秒,10秒并非一个固定的等待时间,它并不影响脚本的执行速度。它并不针对页面上的某一元素进行等待,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行,如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超过设置时长10秒还没定位到元素,则抛出异常

定位一组元素

texts=driver.find_elements_by_xpath(" ")

for t in texts:

    print(t.text)

多表单切换:一个页面嵌套了另外一个页面

 在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to_frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中

driver.switch_to.frame(" ")切换表单,默认接收id和name,如果没有id和name,我们可以先用xpath把元素定位出来,然后再传参

例如:

element=driver.find_elements_by_xpath("//ifame[@id="x-URS-iframe"]")driver.switch_to_frame(element)

driver.switch_to.default_content() 退出表单

switch_to_frame()默认可以直接取表单的id或者name属性,如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

先通过xpath定位到iframe

xf=driver.find_element_by_xpath(" ")

driver.switch_to_frame(xf)

多窗口切换:

switch_to.window()方法,可以实现在不同的窗口之间切换

handle=driver.current_window_handle  获得当前窗口句柄

handles=driver.window_handles 获得当前所有打开的窗口的句柄

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

警告框处理:

driver.switch_to_alert().accept() 接受警告框

driver.switch_to_alert().text 返回alert/confirm/prompt中的文字信息

上传文件:

第一种html方法

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>upload_file</title>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
  <div class="row-fluid">
<div class="span6 well">
<h3>upload_file</h3>
 <input type="file" name="file" />
</div>
  </div>
</body>
<script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></scrip>
</html>

from selenium import webdriverdriver=webdriver.Chrome()driver.get("file:///C:\\Users\\zhengyh\\PycharmProjects\\untitled2\\upload_file.html")-----html文件打开的url地址driver.find_element_by_name("file").send_keys("F:\\upload.txt")------附件的存放地址
第二种方法:

AutoIt来实现上传,下载地址:https://www.autoitscript.com/site/autoit/downloads/

AutoIt Windows Info:用于识别windows控件信息

Compile Script to.exe用于将AutoIt生成exe执行文件

Run Script:用于执行AutoIt脚本

SciTE Script Editor用户编写AutoIt脚本

from selenium import webdriverimport osdriver=webdriver.Chrome()driver.get("file:///C:\\Users\\zhengyh\\PycharmProjects\\untitled2\\upload_file.html")#driver.find_element_by_name("file").send_keys("F:\\upload.txt")driver.find_element_by_name("file").click()os.system("F:\\upload.au2.exe")

操作cookie:

get_cookies() 获得所有cookie信息

get_cookie(name)返回字典的key为name的cookie信息

add_cookie(cookie_dict) 添加cookie,cookie_dict指字典对象,必须有name和value值

delete_cookie(name,optionString) 删除cookie信息,name是要删除的cookie的名称,optionString是该cookie的选项,目前支持的选项包括路径,域

delete_all_cookies() 删除所有cookie信息

调用javaScript:滑动窗口的滚动条

js="windos.scrollTo(100,450);"

driver.execute_script(js)

下拉框的处理:

from selenium.webdriver.support.select import Select

sel=driver.find_element_by_xpath(" ")

Select(sel).select_by_value("50") 50是value值

Select用于定位<select>标签

select_by_value()方法用于定位选项中的value值

窗口截图:

driver.get_screenshot_as_file("图片保存路径")

关闭窗口:

quit()  关闭当前所有窗口

close()  关闭当前一个窗口




原创粉丝点击