selenium基本操作
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait,Select
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.action_chains import ActionChains
import time,os #打开浏览器
driver=webdriver.Firefox() #关闭浏览器
driver.quit() #关闭窗口,退出webdriver,释放与driver server之间的连接
driver.close() #关闭当前浏览器窗口 #最大化浏览器
driver.maximize_window() #设置浏览器大小 1.容易跟基于图像对比的工具进行结合 2.不同浏览器大小下访问测试站点
driver.set_window_size(400,600) #访问链接
url="http://www.baidu.com"
driver.get(url) #打印当前页的title及url
driver.title
driver.current_url #前进和后退
driver.back()
driver.forward() #简单的对象定位
driver.find_element #定位一组对象
driver.find_elements() #层级定位,通过父元素定位到子孙元素
menu = driver.find_element_by_id('dropdown1').find_element_by_link_text('Another action') #操作测试对象
driver.find_element_by_id().click()
driver.find_element_by_id().clear()
driver.find_element_by_id().send_keys() #send keys模拟按键输入
driver.find_element_by_id().send_keys((Keys.CONTROL,'a'))
driver.find_element_by_id().send_keys('watir','-','webdriver',Keys.SPACE,'better') #处理button group
buttons = driver.find_element_by_class_name('btn-group').find_elements_by_class_name('btn')
for btn in buttons:
if btn.text == 'second': print ('find second button') #处理button dropdown
#1.点击下拉菜单 2.找到dropdown-menu父元素 3.找到better than
driver.find_element_by_link_text('Info').click()
WebDriverWait(driver,10).until(lambda the_driver: the_driver.find_element_by_class_name('dropdown-menu').is_displayed())
menu = driver.find_element_by_class_name('dropdown-menu').find_element_by_link_text('better than') #处理navs,类似tab的导航栏
# 方法1:层级定位,先定位ul再定位li
driver.find_element_by_class_name('nav').find_element_by_link_text('About').click()
# 方法2: 直接定位link
driver.find_element_by_link_text('Home').click() #分页处理
# 获得所有分页的数量 -2是因为要去掉上一个和下一个
total_pages = len(driver.find_element_by_class_name('pagination').find_elements_by_tag_name('li')) - 2
print ("total page is %s" %(total_pages))
# 获取当前页面的url以及当前页面是第几页
current_page = driver.find_element_by_class_name('pagination').find_element_by_class_name('active')
print ("current page is %s" %(current_page.text)) #处理对话框
# 打开对话框
driver.find_element_by_id('show_modal').click()
wait = ui.WebDriverWait(driver, 10)
wait.until(lambda dr: dr.find_element_by_id('myModal').is_displayed())
# 点击对话框中的链接
# 由于对话框中的元素被蒙板所遮挡,直接点击会报 Element is not clickable的错误
# 所以使用js来模拟click
# 在watir-webdriver中只需要fire_event(:click)就可以了
link = driver.find_element_by_id('myModal').find_element_by_id('click')
driver.execute_script('$(arguments[0]).click()', link)
# 关闭对话框
buttons = driver.find_element_by_class_name('modal-footer').find_elements_by_tag_name('button')
buttons[0].click() #获取测试对象的属性及内容
link = driver.find_element_by_id('tooltip')
title=link.get_attribute('title')
text=link.text #获取测试对象的css属性
link = driver.find_element_by_id('tooltip')
color=link.value_of_css_property('color')
font=driver.find_element_by_tag_name('h3').value_of_css_property('font') #获取测试对象的状态
#是否存在:find_element_by_xxx捕获异常
try:
driver.find_element_by_id('none')
except:
print ('element does not exist')
#是否被选中:element.is_selected()
radio = driver.find_element_by_name('radio')
radio.click()
radio.is_selected()
#是否灰化;element.is_enabled()
text_field = driver.find_element_by_name('user')
text_field.is_enabled()
#是否显示 :element.is_displayed()
driver.execute_script('$(arguments[0]).hide()', text_field)
text_field.is_displayed() #处理表单元素
#使用send_keys方法往多行文本框和单行文本框赋值;
#使用click方法选择checkbox
#使用click方法选择radio
#使用click方法点击button
#使用click方法选择option,从而达到选中select下拉框中某个具体菜单项的效果 #执行js
# 在页面上直接执行js
driver.execute_script('$("#tooltip").fadeOut();')
# 在已经定位的元素上执行js
button = driver.find_element_by_class_name('btn')
driver.execute_script('$(arguments[0]).fadeOut()', button) #处理alert/confirm/prompt
# 点击链接弹出alert
driver.find_element_by_id('tooltip').click()
try:
alert = driver.switch_to_alert()
#alert.send_keys() 如果是prompt
alert.accept()
#alert.dismiss()
except:
print ('no alerts display') #wait
# 等待页面完成某些操作
driver.find_element_by_id('btn').click()
wait = ui.WebDriverWait(driver, 10)
wait.until(lambda dr: dr.find_element_by_class_name('label').is_displayed()) #定位frame中的元素
# 先到f1再到f2
driver.switch_to_frame('f1')
driver.switch_to_frame('f2')
# 往f2中的百度关键字文本框中输入内容
driver.find_element_by_id('kw').send_keys('watir-webdriver')
# 直接跳出所有frame
driver.switch_to_default_content()
# 再到f1
driver.switch_to_frame('f1')
driver.find_element_by_link_text('click').click() #action
#key_down。模拟按键按下
#key_up。模拟按键弹起
#click
#send_keys
#double_click。鼠标左键双击
#click_and_hold。鼠标左键点击住不放
#release。鼠标左键弹起,可以与click_and_hold配合使用
#move_to_element。把鼠标移动到元素的中心点
#content_click。鼠标右键点击
#drag_and_drop。拖拽
element = driver.find_element_by_link_text('xxxxx')
hov = ActionChains(driver).move_to_element(element)
hov.perform() #上传文件,找到上传文件的对象
driver.find_element_by_name('file').send_keys('./upload_file.md') #下载
fp = 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")
browser = webdriver.Firefox(firefox_profile=fp)
browser.get("http://pypi.python.org/pypi/selenium")
browser.find_element_by_partial_link_text("selenium-2").click() #超时设置,implicit_wait
ff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds #cookie实现自动登录
driver.get_cookies()
driver.delete_all_cookies()
driver.add_cookie({'name': 'BAIDUID', 'value': 'xxxxxx'})
driver.add_cookie({'name': 'BDUSS', 'value': 'xxxxxx'})
driver.get(url)
#定位select > option*x 结构元素
#1
driver.find_element_by_id("aaa").find_elements_by_tag_name("option")[1].click();
#2
driver.find_element_by_xpath("//select[@id='aaa']").find_element_by_xpath("//option[@value='5PM']").click()
#3
select = Select(driver.find_element_by_id("aaa"))
select.deselect_all()
select.select_by_visible_text("Edam") #css定位 优点:定位速度比xpath快, 语法更简洁
#1.使用class属性定位,先指定一个Html标签,然后加一个“.'加上class的值
driver.find_element_by_css_selector(”input.login")
#2.使用id属性定位,先指定一个Html标签,然后加一个“#'加上id的值
driver.find_element_by_css_selector(”input#login")
#3.使用name或alt属性定位
driver.find_element_by_css_selector(”input[name=login]")
driver.find_element_by_css_selector(”input[alt=login]")
#4.当属性不足时,可以使用多个属性来定位
driver.find_element_by_css_selector(”input[type='submit'][value='login']") #5.使用属性名称选择器定位元素
driver.find_element_by_css_selector(”img[alt]"
driver.find_element_by_css_selector(”img:not[alt]") #6.使用属性名称匹配
driver.find_element_by_css_selector(”img[alt]")
driver.find_element_by_css_selector(”img:not[alt]")
#7.部分属性值的匹配
driver.find_element_by_css_selector(”input[id^='ctrl']") #id以ctrl开头的元素
driver.find_element_by_css_selector(”input[id$='ctrl']") #id以ctrl结尾的元素
driver.find_element_by_css_selector(”input[id*='ctrl']") #id包含ctrl的元素
#xpath定位
#1.使用相对路径
driver.find_element_by_xpath(”//input")
#2.使用索引
driver.find_element_by_xpath(”//input【2】")
#3.使用xpath及属性值
driver.find_element_by_xpath(”//input[@id='username']")
driver.find_element_by_xpath(”img[@alt='username']")
driver.find_element_by_xpath(”//input[@type='submit'][@value='login']")
driver.find_element_by_xpath(”//input[@type='submit' and @value='login']")
#4.部分属性值匹配
driver.find_element_by_xpath(”//input[starts-with(@id,'ctrl')]")
driver.find_element_by_xpath(”//input[ends-with(@id,'ctrl')]")
driver.find_element_by_xpath(”//input[contains(@id,'ctrl')]")
#5.使用值来匹配任意属性及元素
driver.find_element(By.xpath("//input[@*='username']"))
#6.使用xpath轴来定位元素
选择当前节点所有的父类元素,包括祖先元素
ancestor:driver.find_element(By.xpath("//td[text()='Product']/ancestor::table"))
选择当前节点所有子元素
descendant:driver.find_element(By.xpath("//table/descendant::td/input"))
选择当前元素结束标签后的所有元素
following:driver.find_element(By.xpath("//td[text()="Product"]/following::tr"))
选择当前元素后的兄弟元素
following-sibling:driver.find_element(By.xpath("//td[text()="Product"]/following-sibling::td"))
选取文档中当前节点的开始标签之前的所有节点
preceding:driver.find_element(By.xpath("//td[text()="Product"]/preceding::tr"))
选择当前节点之前的所有同级节点
preceding-sibling:driver.find_element(By.xpath("//td[text()="Product"]/preceding-sibling::td"))
#7.使用text()函数
driver.find_element(By.xpath("//td[contains(text(),'Item')]"))
使用精确文本定位
driver.find_element(By.xpath("//td[.='Item']))
selenium基本操作的更多相关文章
- <day002>Selenium基本操作+unittest测试框架
任务1:Selenium基本操作 from selenium import webdriver # 通用选择 from selenium.webdriver.common.by import By # ...
- Selenium 基本操作--元素定位
对页面元素进行操作 1. 输入框输入 driver.findElement(By.id("id号")).sendKeys(“输入框输入内容”): 例:
- selenium 基本操作
#前进 driver.back() #后退 driver.forward() #刷新 driver.refresh() #退出 driver.quit() #获取所有 cookie cookies=d ...
- 使用Selenium爬取网站表格类数据
本文转载自一下网站:Python爬虫(5):Selenium 爬取东方财富网股票财务报表 https://www.makcyun.top/web_scraping_withpython5.html 需 ...
- python爬虫--selenium模块.上来自己动!
selenium 基本操作 from selenium import webdriver from time import sleep #实例化一个浏览器对象 bro = webdriver.Chro ...
- python selenium webdriver入门基本操作
python selenium webdriver入门基本操作 未经作者允许,禁止转载! from selenium import webdriver import time driver=webdr ...
- Python3 Selenium WebDriver网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作
Python3 Selenium WebDriver网页的前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 通过selenium webdr ...
- 跟浩哥学自动化测试Selenium -- 浏览器的基本操作与元素定位(3)
浏览器的基本操作与元素定位 通过上一章学习,我们已经学会了如何设置驱动路径,如何创建浏览器对象,如何打开一个网站,接下来我们要进行一些复杂的操作比如先打开百度首页,在打开博客园,网页后退,前进等等,甚 ...
- Selenium WebDriver-网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作
通过selenium webdriver操作网页前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 from selenium import ...
随机推荐
- Cosmos OpenSSD--greedy_ftl1.2.0(一)
从主函数跳到ReqHandler,在ReqHandler内先初始化SSD--InitNandReset,然后建立映射表InitFtlMapTable void InitNandReset() { // ...
- 旅行(LCA)
Description N-1座桥连接着N个岛屿,每座桥都连接着某两个不同的岛屿,从任意一个岛屿都可以到达所有的其他岛屿,过桥需要缴纳人民币1元的过桥费. 由于某些不可透露的原因,Jason和他的2个 ...
- MAVEN 打包JAR
<build> <finalName>edu-service-user</finalName> <resources> <resource> ...
- 符合语言习惯的Python优雅编程技巧
Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀 ...
- java:凯撒密码及String的应用
一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...
- 网络地址转换NAT
1. 网络地址转换:用于专用网内部的主机和因特网上的主机通信.在专用网连接到因特网 的路由器上需要安装NAT软件,装有NAT软件的路由器叫做NAT路由器,它至少要有 一个有效的全球IP地址.所有使用本 ...
- LeetCode 56. Merge Intervals (合并区间)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- 游标的小知识(借鉴and整理)
一.游标(用来存储多条查询数据的一种数据结构(结果集),它有一个指针,用来从上往下移动,从而达到遍历每条记录的作用) 游标也可以理解为逐行返回SQL语句的结果集 如何编写一个游标? 1.声明游标 de ...
- 运行第一个Go Web框架
GO 语言的web框架很多,相对来说, Beego 框架,入门简单,文档齐全(中文),功能强大,本文以Beego 示例. Beego提供了详细的开发文档:http://beego.me/docs/in ...
- Caffe Ubuntu16.04 GPU安装