web元素定位及操作()
来源:互联网 发布:如何自学编程 编辑:程序博客网 时间:2024/05/30 05:29
单个元素定位:
#coding=utf-8from selenium import webdriverdr=webdriver.Opera()'''找元素2???、前端工具是什么?segbug没找到,可以使用find搜索#dr.find_element_by_id() 根据元素本身的属性来find element#dr.find_element_by_name() 根据元素本身的属性来find element#dr.find_element_by_class_name() 根据元素本身的属性来find element#dr.find_element_by_tag_name() 根据标签来定位,如input,试用于定位1组元素:dr.find_elements_by_tag_name("input")[7]3???、这个组是相对于什么的,如果两个div中有相同的标签是先使用其他方式,追溯到要定位的标签,然后再使用该方式#dr.find_element_by_link_text() 根据文本链接#dr.find_element_by_partial_link_text() 根据使用文本关键字链接#dr.find_element_by_xpath() 根据元素所在的路径()中的语法:例子1:"//*[@id='kw']"//:在某1个路径下面 4???:某路径是哪个路径/:根目录*:某标签如input[@id='kw']:@后面跟上元素的属性例子2:"//a[@id='s_username_top']/span" 可以往上追溯父级解析:找[a标签中id属性为s_username_top]中的标签为input的元素,"//a[@id='s_username_top']/span[@id='1234']"
例子3:"//form[@id='form']/span[2]/input"解析:找[form标签中id属性为form]中的第2个标签为span(从1开始)的元素例子4:"/html/body[2]/..." 绝对路径即从html开始例子5:"//a[@id='s_username_top' and @class='s_ipt' ...]"同时使用多条件来确定元素,即使用布尔方法来定位元素:more...W3C上有更多内容#dr.find_element_by_css_selector()".s_ipt" class为s_ipt的元素"#s_ipt" id为s_ipt的元素"[name=wd]" []中属性为**的元素"span.s_ipt >input#kw" span标签中class为s_ipt 中标签为input的id为kw的元素,用>表示下级'''dr.find_element_by_tag_name("kw") #百度输入框dr.find_element_by_id("su") #百度一下按钮dr.find_element(By.ID, "kw")'''#看底层的实现:\site-packages\selenium\webdriver\remote的webdriver.py,就会发现# dr.find_element_by_id("kw")==dr.find_element(By.ID,"kw"),查看260行,使用后者需要导入class(By):from selenium.webdriver.common.by import By#???不懂怎么知道该导入哪些class,&该这样导入''''''help(By) 如何知道By有哪些方法''''''对于元素有可以进行的操作可以查看\site-packages\selenium\webdriver\remote的webelement.py''''''出现编码问题时,简便方法是使用python自带的IDE'''
注意:定位不到的时候注意是否有相同的属性值,元素是否在表单中,元素的属性值会变化
web元素控制:
from selenium import webdriverfrom time import sleep#使用Opera异常:无法打开页面,输入链接#web端,在页面加载完全时,才操作下个步骤driver=webdriver.Chrome()driver.maximize_window()#设置浏览器宽&高显示,参考数字为像素点:driver.set_window_size(380,500)#页面全屏化'''driver.get("https://www.baidu.com")driver.find_element_by_link_text("新闻").click()sleep(3)#页面后退及前进,一般采用get,跳转到页面driver.back()driver.forward()#页面刷新driver.refresh()print("baidu OK")'''driver.get("http://www.126.com")#查看登陆前页面的title等信息,for断言title=driver.titleprint(title)url=driver.current_urlprint(url)#定位该元素的时候,出现错误:无法找到该元素。#原因:通过追溯该元素的所在发现,该元素所在的html,嵌套在iframe表单中driver.switch_to_frame("x-URS-iframe") #先切换到该表单,默认接收id/name,无需指定driver.find_element_by_name("email").clear()driver.find_element_by_name("email").send_keys("testingwtb")driver.find_element_by_name("password").clear()driver.find_element_by_name("password").send_keys("a123456")driver.find_element_by_id("dologin").click() #d对比submit()driver.switch_to_default_content()#退出表单到最外层:是指退出到当前表单吗?那此时焦点在哪里?若想找外层的元素,直接找,还是继续退?#断言,常用判断条件:title;url;text等sleep(5)title=driver.titleprint(title)url=driver.current_urlprint(url)text=driver.find_element_by_id("spnUid").textprint(text)assert text=="testingwtb@126.com" #此为python提供的断言方法,但不能统计,使用单元测试的,可以进行统计#driver.quit()
元素组定位:
方法为在单个元素的基础上修改,直接在element后加s,即elements
#coding=utf-8from selenium import webdriverimport osdriver = webdriver.Firefox()file_path = 'file:///' + os.path.abspath('checkbox.html')driver.get(file_path)# 选择页面上所有的 tag name 为 input 的元素inputs = driver.find_elements_by_tag_name('input')
# 打印当前页面上tag_name为input的个数
print len(inputs)#然后从中过滤出 tpye 为 checkbox 的元素,单击勾选for i in inputs: if i.get_attribute('type') == 'checkbox': i.click()
# 把页面上最后 1 个 checkbox 的勾给去掉:pop() 函数用于获取列表中的一个元素(默认为最后一个元素),pop()或 pop(-1) 默认获取一组元素中的最后一个,pop(0) 默认获取一组元素中的第一个。pop(1) 默认获取一组元素中的第二个。
driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()driver.quit()
多表单切换(遇到frame嵌套页面时,WebDriver每次只能在一个页面上识别元素,可使用switch_to_frame()先找到frame.html 中的<iframe>标签):
#id = "if"driver.switch_to_frame("if")#name = "nf"driver.switch_to_frame("nf")#先通过 xpth 定位到 iframexf = driver.find_element_by_xpath('//*[@class="if"]')#再将定位对象传给 switch_to_frame()方法driver.switch_to_frame(xf)……#通过 switch_to_default_content()方法返回到上一层表单,默认对应与它最近的 switch_to_frame()方法driver.switch_to_default_content()多窗口切换:
#获得当前窗口句柄
sreach_windows= driver.current_window_handle
#获得当前所有打开的窗口的句柄
all_handles = driver.window_handles
#切换到handle窗口
driver.switch_to_window(handle)
警告框处理:
switch_to_alert()
text 返回 alert/confirm/prompt 中的文字信息。
accept 点击确认按钮。
dismiss 点击取消按钮,如果有的话。
send_keys 输入值,这个 alert\confirm 没有对话框就不能用了,不然会报错。
#coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsdriver = webdriver.Firefox()driver.implicitly_wait(10)driver.get('http://www.baidu.com')#鼠标悬停相“设置”链接link = driver.find_element_by_link_text(u'设置')ActionChains(driver).move_to_element(link).perform()#打开搜索设置driver.find_element_by_class_name('setpref').cick()#保存设置driver.find_element_by_css_selector('#gxszButton > a.prefpanelgo').click()#接收弹窗driver.switch_to_alert().accept()driver.quit()
文件上传:
send_keys 实现上传:对于通过 input 标签实现的通过上传,通过 send_keys()传入本地文件路径从而模拟上传功能
#定位上传按钮,添加本地文件driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')Windows平台的AutoIt工具:
下载文件:
提前设置浏览器属性:
#coding=utf-8from selenium import webdriverimport osfp = webdriver.FirefoxProfile()fp.set_preference("browser.download.folderList",2)fp.set_preference("browser.download.manager.showWhenStarting",False)fp.set_preference("browser.download.dir", os.getcwd())fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream") #下载文件的类型driver = webdriver.Firefox(firefox_profile=fp)driver.get("http://pypi.Python.org/pypi/selenium")driver.find_element_by_partial_link_text("selenium-2").click()
火狐浏览器可通过地址栏输入:about:config 进行设置
AutoIt
操作 Cookie(WebDriver 提供):
webdriver 操作 cookie 的方法有:
get_cookies() 获得所有 cookie 信息
get_cookie(name) 返回有特定 name 值有 cookie 信息
add_cookie(cookie_dict) 添加 cookie,必须有 name 和 value 值
delete_cookie(name) 删除特定(部分)的 cookie 信息
delete_all_cookies() 删除所有 cookie 信息
调用JavaScript(WebDriver提供了execute_script()方法来执行JavaScript代码):如上下滚动条的处理:
……<body onload= "document.body.scrollTop=0 "><body onload= "document.body.scrollTop=100000 ">……scrollTop 设置或获取滚动条与最顶端之间的距离,scrollTop 的值以像素为单位。#将页面滚动条拖到底部js="document.documentElement.scrollTop=10000"driver.execute_script(js)time.sleep(3)如上下滚动条:
#window.scrollTo(左边距,右边距);js=" window.scrollTo(200,1000);"driver.execute_script(js)窗口截图(get_screenshot_as_file(指定图片的保存路径及文件名)):#coding=utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.get('http://www.baidu.com')try:driver.find_element_by_id('kw_error').send_key('selenium')driver.find_element_by_id('su').click()except :driver.get_screenshot_as_file("D:\\baidu_error.jpg")driver.quit()
关闭窗口:close()
0 0
- web元素定位及操作()
- jquery几种页面元素定位及操作的方法
- web robotframework xpath元素定位
- UI自动化测试(二)浏览器操作及对元素的定位方法(xpath定位和css定位详解)
- selenium元素定位及常见的表单元素定位
- webdriver加载jQuery代码,并且使用jQuery的写法来定位元素及操作
- Appium native hybrid webview混合操作及元素定位(14)
- Selenium2: web元素定位方法笔记
- Selenium中CSS定位Web UI元素
- python+selenium定位web元素篇
- Web元素定位之CSS Selector
- Appium处理纯web应用元素定位
- Watir-webdriver_ruby元素操作与定位
- Selenium(2): DOM元素定位、操作
- python Selenium 常见操作 元素定位
- 每天一个JavaScript实例-操作元素定位元素
- selenium(2)--浏览器操作、元素定位、操作
- java selenium (九) 常见web UI 元素操作 及API使用
- 对象的集合--栈 ,使用链表来实现
- Net实现拉勾网爬虫
- bootstrap-suggest-plugin
- Kadane算法
- 操作系统实验-页面地址重定位
- web元素定位及操作()
- MySQL 导出数据
- 光流法简单介绍
- DataBinding系列一、绑定数据到view
- 基于netty的消息队列StormMQ简介
- StringBuffer的使用
- 【算法和数据结构】1.2.2–排序算法之选择排序(C++实现)
- ios关于时间的设置若干问题之一
- LINUX C编写一个hello world!程序