selenium+python自动化基础二(定位元素...等)
来源:互联网 发布:二次元测量仪软件模拟 编辑:程序博客网 时间:2024/05/20 23:31
8. 定位一组元素
这里书上是自己写了一个页面代码,通过访问本地这个页面来举例。但我觉得找一个现有的页面自己琢磨更有意思,而且复杂的页面也会遇到复杂的问题。比如我根据163邮箱登录页面的 “十天内免登录” 复选框写了如下的代码:
from selenium import webdriverimport timedriver = webdriver.Firefox()driver.get('http://mail.163.com/')driver.implicitly_wait(20) #这里加一个隐式等待命令,等待页面加载,不然可能会报错driver.switch_to_frame('x-URS-iframe') #163邮箱登录页面的复选框在一个框架内,所以需要定位到该框架内#选择页面上所有的tag name 为input的元素inputs = driver.find_elements_by_tag_name('input') #一定要注意定位一组元素需要是 elements, 而不是element#通过for循环找出type为checkbox的元素并且单击勾选for i in inputs: if i.get_attribute('type') == 'checkbox': i.click() time.sleep(1) print(len(inputs)) #这里结果打印出来是9,所以在这个框架内复选框的个数应该是9,但是比较直观的我们只能看到“十天内免登录”#driver.quit()
上面这段代码会勾选 “十天内免登录” 复选框,其实如果单纯实现这个行为有更简单的方法,但是这里只是为了理解定位一组元素的方法。下面介绍 pop() 方法:
获取一组元素中最后一个pop() 或者 pop(-1)例如: driver.find_element_by_id('xx').pop().click()获取一组元素中的第一个pop(0) 获取一组元素中的第二个pop(1)
9. 多表单切换
- 嵌套的iframe有 id 或 name: switch_to_frame('') 里面填写 id 或者 name。 这里书里写的是: switch_to.frame(),这两个方法我都试过了,全都是正确的。但还是建议用规范的写法:switch_to.frame()
- 嵌套的iframe 没有 id 或 name:
.......xf = driver. find_element_by_xpath('//*[@class="if"]')driver.switch_to_frame(xf)driver.switch_to.parent_frame() # 默认跳出离它最近的switch_to.frame() 方法driver.switch_to.default_content() # 跳回最外层的页面
10. 多窗口切换
获得当前窗口句柄current_window_handle例如: search_window = driver.current_window_handle返回所有打开的窗口的句柄到当前会话window_handles例如: all_handles = driver.window_handles切换到相应的窗口switch_to.window()例如: driver.switch_to.window(search_window)
11. 警告框处理: switch_to_alert() 方法定位到alert/confirm/prompt,然后使用下面的方法进行操作
返回 alert/confirm/prompt 中的文字信息text接受现有警告框accept()举例:switch_to_alert().accept()解散现有警告框dismiss()
发送文本至警告框send_keys(keysToSend)
12. 上传文件
- send_keys(''): 和模拟键盘输入操作是一样的,value替换成 文件的本地目录
- AutoIt 实现: 不过多解释,有兴趣可以自己学习一下
13. 下载文件: 一个脚本解释一切
1 from selenium import webdriverimport os2 fp = webdriver.FirefoxProfile()3 fp.set_preference("browser.download.folderList", 2) #浏览器下载路径,0代表默认路径,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") #下载文件的类型4 driver = webdriver.Firefox(firefox_profile=fp)driver.get("https://pypi.python.org/pypi/selenium")driver.implicitly_wait(30) driver.find_element_by_partial_link_text("selenium-3.4.3.tar.gz").click()
14. 操作cookie
from selenium import webdriverdriver = webdriver.Firefox()driver.get("http://youdao.com")cookie = driver.get_cookies()print(cookie) #打印当前页面cookie信息driver.add_cookie({'name': 'key-aaa', 'value': 'value-bbb'})#添加cookie信息for cookie in driver.get_cookies(): print("%s -> %s" %(cookie['name'], cookie['value']))#再次打印cookie的name和value信息driver.quit()
运行上面的脚本,查看运行结果就能理解
15. 调用JavaScript
- 通过 JavaScript 设置浏览器滚动条位置
1 from selenium import webdriverfrom time import sleep2 driver = webdriver.Firefox()driver.get("http://www.baidu.com")driver.implicitly_wait(20)3 driver.set_window_size(500,500)4 driver.find_element_by_id("kw").send_keys("selenium")driver.find_element_by_id("su").click()sleep(2)5 js="window.scrollTo(100,450);" #通过JavaScript设置浏览器窗口的滚动条位置driver.execute_script(js) #执行js脚本sleep(3)6 driver.quit()
- 向页面中的 textarea 文本框输入内容
1 text = "input text"js = "var sum=document.getElementById('id'); sum.value='" + text + "';"driver.execute_script(js)
16. 处理 HTML5 的视频播放
from selenium import webdriverfrom time import sleepdriver = webdriver.Firefox()driver.get("http://www.miaopai.com/show/NvFBW3o2ZprzmFd8Xsq96RnB5Ax6nFSi.html") #秒拍上的一个视频driver.implicitly_wait(20)video = driver.find_element_by_xpath("/html/body/div[7]/div[1]/div[1]/div[2]/div/div/video") #定位视频位置url = driver.execute_script("return arguments[0].currentSrc;", video) #返回视频的urlprint(url) #打印视频urlprint("start")driver.execute_script("return arguments[0].play()", video) #开始播放视频sleep(15) #播放15秒print("stop")driver.execute_script("arguments[0].pause()", video) #停止播放视频driver.quit()
17. 窗口截图
driver.get_screenshot_as_file("D:\\pictures\\test.jpg")
18. 关闭窗口
- quit(): 退出相关驱动程序和关闭所有窗口
- close(): 关闭当前窗口
19. 验证码的处理
- 去掉验证码: 开发人员在测试环境注释掉验证码的相关代码即可
- 设置万能验证码: 设置一个万能验证码
- 验证码识别技术: Python-tesseract 能够读取任何常规图片
- 记录cookie: 直接添加自己的用户名密码信息到 cookie 中,再次访问网站,服务器直接调取cookie登录
阅读全文
0 0
- selenium+python自动化基础二(定位元素...等)
- selenium+python自动化基础(定位元素...等)
- selenium+python自动化测试(三)--页面元素定位
- 简单自动化元素定位selenium python
- Python Selenium 学习笔记(二)定位元素
- Appium+python自动化学习(二)——定位元素
- Selenium自动化测试Python二:WebDriver基础
- 轻松自动化---selenium-webdriver(python) (三) 简单元素的定位
- 轻松自动化---selenium-webdriver(python) (四)--如何定位一组元素?
- 3、Selenium + Python 实现 UI 自动化测试-元素定位
- 4、Selenium + Python 实现 UI 自动化测试-定位元素吗?
- 通过切换iframe来定位元素(用于Python+selenium自动化测试)
- 初学者的Selenium自动化测试指南,基于Python(一)——元素定位
- (1)自动化selenium准备与元素定位代码
- 自动化测试(python+selenium)入门(二)
- webdriver基础python版(二)简单的元素定位
- selenium + python之元素定位
- selenium + python之元素定位
- spring 处理器映射器/适配器
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
- hdu 1536 S-Nim
- scrapy修改user-agent的几种方法
- django-bootstrap 总结
- selenium+python自动化基础二(定位元素...等)
- git reset --hard 放弃本地修改
- JNI :java 调用C++动态库
- 现在流行小程序电子名片,你跟上节奏了么?
- 文件上传,用通道,提高性能
- Eureka 源码解析 —— 任务批处理
- 求1+2+3+...100的和的递归和循环实现
- Linux下查看内核、CPU、内存及各组件版本的命令和方法
- ARIMA预测