#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基本操作的更多相关文章

  1. <day002>Selenium基本操作+unittest测试框架

    任务1:Selenium基本操作 from selenium import webdriver # 通用选择 from selenium.webdriver.common.by import By # ...

  2. Selenium 基本操作--元素定位

    对页面元素进行操作 1.   输入框输入 driver.findElement(By.id("id号")).sendKeys(“输入框输入内容”): 例:

  3. selenium 基本操作

    #前进 driver.back() #后退 driver.forward() #刷新 driver.refresh() #退出 driver.quit() #获取所有 cookie cookies=d ...

  4. 使用Selenium爬取网站表格类数据

    本文转载自一下网站:Python爬虫(5):Selenium 爬取东方财富网股票财务报表 https://www.makcyun.top/web_scraping_withpython5.html 需 ...

  5. python爬虫--selenium模块.上来自己动!

    selenium 基本操作 from selenium import webdriver from time import sleep #实例化一个浏览器对象 bro = webdriver.Chro ...

  6. python selenium webdriver入门基本操作

    python selenium webdriver入门基本操作 未经作者允许,禁止转载! from selenium import webdriver import time driver=webdr ...

  7. Python3 Selenium WebDriver网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    Python3 Selenium WebDriver网页的前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 通过selenium webdr ...

  8. 跟浩哥学自动化测试Selenium -- 浏览器的基本操作与元素定位(3)

    浏览器的基本操作与元素定位 通过上一章学习,我们已经学会了如何设置驱动路径,如何创建浏览器对象,如何打开一个网站,接下来我们要进行一些复杂的操作比如先打开百度首页,在打开博客园,网页后退,前进等等,甚 ...

  9. Selenium WebDriver-网页的前进、后退、刷新、最大化、获取窗口位置、设置窗口大小、获取页面title、获取网页源码、获取Url等基本操作

    通过selenium webdriver操作网页前进.后退.刷新.最大化.获取窗口位置.设置窗口大小.获取页面title.获取网页源码.获取Url等基本操作 from selenium import ...

随机推荐

  1. mysql 中select for update 锁表的范围备注

    mysql的锁表范围测试 1.主键明确时,行级锁: 解释:指定主键并且数据存在时,仅锁定指定的行,其它行可以进行操作 实例:指定了锁定id=1的行且数据存在①,在更新1时lock wait超时②,但是 ...

  2. 217. Contains Duplicate (leetcode)

    Given an array of integers, find if the array contains any duplicates. Your function should return t ...

  3. LeetCode 381. Insert Delete GetRandom O(1) - Duplicates allowed (插入删除和获得随机数 常数时间 允许重复项)

    Design a data structure that supports all following operations in average O(1) time. Note: Duplicate ...

  4. 找到python官方标准库文档

    python中有很多标准库.我们没法记住全部标准库,但是可以在:https://docs.python.org/3/py-modindex.html 中查看标准库的索引 在python的官方文档中,如 ...

  5. 01-从零玩转JavaWeb-面向过程与面向对象

    配套视频讲解:面向过程面向对象 一.面向过程 所有事情都按顺序一件一件来执行.   二.面向对象 面向对象是将功能通过对象也实现,将功能封装进对象之中 让对象去实现具体的细节   三.面向对象的目的 ...

  6. 关于火狐浏览器在开发调试过程中,出现javascript:void(0)的状态

    关于火狐浏览器在开发调试过程中,出现javascript:void(0)的状态 由于火狐浏览器没有安装 Adobe Flash Player 19 NPAPI这个插件 安装好了之后就可以直接运行了

  7. vim基本命令(转载自网络)

    来源于<Unix初级教程(第四版)>. 命令模式切换到文本输入模式: 键 功能 i 在光标左侧输入文本 I 在当前行的行首输入文本 a 在光标右侧输入文本 A 在当前行的行尾输入文本 o ...

  8. Ubuntu下通过makefile生成静态库和动态库简单实例

    本文转自http://blog.csdn.net/fengbingchun/article/details/17994489 Ubuntu环境:14.04 首先创建一个test_makefile_gc ...

  9. 常用meta整理[转载]

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他web ...

  10. JAVAWEB开发环境搭建,附JDK开发环境一键配置批处理bat

    JDK配置: CLASSPATH: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar   JAVA_HOME: C:\Program Files\J ...