Selenium2自动化测试的元素定位

Selenium2自动化测试的元素定位

    Web页面有输入框,按钮,文字,图片,下拉框等,自动化要做的就是模拟鼠标和键盘来操作(单击,右击,双击,输入,或悬停)

Web页面元素属性有id,name,class name,tag nameXPathCSS

Webdriver元素定位方法

id

find_element_by_id()

name

find_element_by_name()

class name

find_element_by_class_name()

tag name

find_element_by_tag_name()

link text

find_element_by_link_text()

partial link text

find_element_by_partial_link_text()

xpath

find_element_by_xpath()

css selector

find_element_by_css_selector()

   例如:find_element_by_tag_name(input),前端页面上<div>,<input>,<a>tag,所以很难通过tag name区分不同的元素。

   针对文本链接定位:find_element_by_link_text(text)是通过元素标签对之间的文本信息来定位元素。

   .XPath定位

   1.决定路径定位: xpath主要用标签名的层级关系来定位元素的绝对路径;

   2.利用元素属性定位:如find_element_by_xpath(//input[@id=kw])

不想指定标签名时,则可以用*代替,如find_element_by_xpath(//*[@id=kw])

Xpath不局限于id,name,class这些属性,元素的任意属性值都可以,只要它唯一的标识一个元素;

   3.利用层级和属性的结合:如find_element_by_xpath(//form[@id=form]/span/input)

   4.使用逻辑运算符:如

find_element_by_xpath(//input[@id=form and @class=su])

   .CSS定位

CSS选择器的常见语法

选择器

例子

描述

.class

.s_ipt

class选择器,选择class=.s_ipt的所有元素

#id

#firstname

id选择器,选择id=firstname的所有元素

*

*

选择所有元素

element

p

元素 所有的<p>元素

element>element

div>input

选择父元素为<dir>的所有<input>元素

element+element

div+input

选择同一级中紧接在<div>元素之后的所有<input>元素

[attribute=value]

[target=_blank]

选择target=_blank的所有元素

 

1)通过class定位:find_element_by_css_selector(.s_ipt) 点号(.)表示通过class属性来定位元素;

2)通过id定位:find_element_by_css_selector(#kw) #表示通过id属性来定位元素;

3)通过标签名定位:

1.直接通过标签名定位:find_element_by_css_selector(input)

2.通过父子关系定位:find_element_by_css_selector(span>input)

4)通过属性定位

三.控制浏览器

1.控制浏览器窗口大小:set_window_size()

2.全屏显示:maximize_window()

3.控制浏览器的前进和后退:forward()back()

4.浏览器的刷新:refresh()

四.简单元素操作

1.clear():清除文本;

2.send.keys(*value):模拟键盘输入

3.click():单击元素

Click()方法不仅可以用于单击一个按钮,还可以单击图片/文字链接,复选框,单选框,下拉框等;

4.submit()用于提交表单,或者在搜索框输入关键字后的回车操作,也可以通过submit()方法模拟;

5.size:返回元素的尺寸;

6.text:获取元素的文本;

7.get_attribute(name):获取属性值;

8.is_displayed():设置该元素是否用户可见;

9.close():关闭当前窗口

10.quit():推出相关的驱动程序并关闭所有的窗口;

通过By定位元素:from selenium.webdriver.common.by import By

五.鼠标事件

ActionChains()类提供鼠标操作的常用方法:

Perform():执行所有的ActionChains中存储的行为;

context_click():右击

double_click():双击

drag_and _drop():拖动

move_to_element():鼠标悬停

举例:

from selenium.webdriver.common.action_chains import ActionChains

#导入提供鼠标操作的ActionChains类。

right_click=find_element_by_id(xx)

ActionChains(driver).context_click(right_click).perform()

#调用ActionChains(driver)类,将浏览器驱动driver作为参数传入,context_click()方法用于模拟鼠标右键操作,在调用时需要指定元素定位;

source=driver.find_element_by_id(xx)

target=driver.find_element_by_id(xx)

ActionChains(driver).drag_and_drop(source,target).perform()

六.键盘事件

Keys()类提供了键盘上几乎所有按键的方法

send_keys()用来模拟键盘输入;

from selenium.webdriver.common.keys import Keys

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,c):复制

send_keys(Keys.CONTROL,v):粘贴

send_keys(Keys.CONTROL,x):剪切

send_keys(Keys.F1):F1

七.验证信息

常用的验证信息有title/URL/text

driver.title/driver.current_url/

八.设置等待元素

显式等待:使WebdDriver等待某个条件成立时继续执行,否则达到最大你等待时长时抛出超时异常(TimeoutException);

隐式等待:通过一定的时长等待页面上某元素加载完成,如果超出了设置的时长仍旧没有加载完成,则抛出NoSuchElementException异常;

Driver.implicitly_wait()默认设置为0;首先它不是一个固定的等待时间,不影响脚本的执行速度,也不针对页面上的某一元素进行等待;当脚本执行的某一元素定位时,如果可以定位,则继续执行,如果定位不到,则以轮询的方式不断的判断元素是否定位到。

九.定位一组元素

Webdriver元素定位方法

id

find_elements_by_id()

name

find_elements_by_name()

class name

find_elements_by_class_name()

tag name

find_elements_by_tag_name()

link text

find_elements_by_link_text()

partial link text

find_elements_by_partial_link_text()

xpath

find_elements_by_xpath()

css selector

find_elements_by_css_selector()

 

from  selenium import webdriver
import os,time
driver=webdriver.Firefox()
file_path="file:///"+os.path.abspath("filename")
driver.get("file_path")

inputs=driver.find_element_by_tag_name("input")
for i in inputs:
    if i.get_attribute("type")=="checkbox":
        i.click()
        time.sleep(2)
driver.quit()

 

十.多表单切换

若遇到/frame/iframe表单嵌套时(webdriver只能在一个页面上对元素进行识别与定位),就需要通过switch_to.frame()方法进行切换。

driver.switch_to.frame()默认可以直接取表单的id或者name属性;、

switch_to.parent_frame():跳出当前表单;

switch_to.parent_content()

switch_to.default_content():跳回最外层的页面;

十一.多窗口切换

当弹出新的窗口时,需切换到新的窗口上进行操作:switch_to.window()

获取当前窗口句柄:driver.current_window_handle

获取当前所有打开的窗口的句柄:driver.window_handles

 

from selenium import  webdriver

driver=webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
#获取搜索窗口句柄
search_windows=driver.current_window_handle
driver.find_element_by_link_text("登录").click()
driver.find_element_by_link_text("立即登录").click()
#获取当前所有打开的窗户的句柄
all_handles=driver.window_handles
#进入注册窗口
for handle in all_handles:
    if handle!=search_windows:
        driver.switch_to.window(handle)
        ....
for handle in all_handles:
    if handle==search_windows:
        driver.switch_to.window(handle)
        ....
driver.quit()

 

十二.警告框处理

webdriver中处理JavaSript所生成的alert(警告框)confirm(确认框)以及prompt(提示框),采用switch_to.alert()定位,然后用textacceptdismisssendkeys等方法进行操作;

text:返回alertconfirmpromp中的文字信息;

accept():接受现有的警告框;

dismiss():解散现有的警告框;

sendkeys(keysToSend):发送文本到警告框;

driver.switch_to.alert().accept()

十三.上传文件

1.send_keys()

2.AutoIt(免费):主要用来Windows GUI的自动化测试;用来模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务;

Autoit下载地址:https://www.autoitscript.com/site/autoit/downloads/

十四.操作cookie

Webdriver操作cookie的方法:

get_cookies():获取所有的cookie信息;

get_cookie(name):返回字典的keynamecookie信息;

add_cookie(cookie_dict):添加cookiecookie_dict 是字典对象,必须有namevalue值;

delete_cookie(name,optionString):删除cookiename是指要删除是cookie的名称,optionString是该cookie选项,支持的选项包括:“路径”/“域”

Delete_all_cookie():删除所有的cookie信息;

from  selenium import webdriver
driver=webdriver.Firefox()
driver.get("http://www.yudao.com")
driver.add_cookie({"name":"key-aaaaa","value":"value-bbbbb"})
for cookie in driver.get_cookies():
    print ("%s->%s"%(cookie["name"],cookie["value"]))
driver.quit()

十五.调用javascript

浏览器滚动条的操作:可以借助javascript来控制;

Webdriver提供了excute_script()方法来执行javascript代码;

from selenium import webdriver
from time import sleep
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
driver.set_window_size(600,600)
driver.find_element_by_id("kw").send_keys("NBA")
driver.find_element_by_id("su").click()
sleep(2)
js="window.scrollTo(100,450)"
driver.execute_script(js)
sleep(3)
driver.quit()

十六.窗口截图

WebDriver提供了截图函数get_screenshot_as_file()来截取当前的窗口;

driver.get_screenshot_as_file("D:\\baidu_img.jpg")

 


                                           

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值