selenium基础_qq_28905427的博客-程序员宅基地

技术标签: selenium自动化  

#!/usr/bin/env python
# coding: utf-8 -*-
# import page as page
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains    #导入鼠标事件模块
from selenium.webdriver.common.keys import Keys     #导入键盘模块
from selenium.webdriver.support.select import Select    #导入select模块
profile_directory = r'C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\4jm6w9vp.default'     #配置文件地址
profile = webdriver.FirefoxProfile(profile_directory)   #加载配置
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
import unittest,time,re,random,os
from time import strftime, localtime
from datetime import datetime

###################### 启动自动化测试 #############################
driver = webdriver.Firefox(profile)
driver.get("http://www.baidu.com/")
# driver.get("file:\\D:\\123.html")
# driver.get("http://dev.flm158.com/admin/")
driver.refresh()   #刷新页面
time.sleep(1)
print driver.current_url      #打印当前页面网址
# print driver.page_source    #爬页面源码
print driver.name   #获取浏览器名称
print driver.title     #打印页面标题
size = driver.find_element_by_id("kw").size    #打印百度输入框尺寸
print size
text = driver.find_element_by_link_text(u"新闻").text   #获取元素的文本
print text
type = driver.find_element_by_id("kw").get_attribute('type')   #获取属性值
# type = driver.find_element_by_id("kw").get_attribute('value')   #获取输入框内的文本值
print type
display = driver.find_element_by_id("kw").is_displayed()  #该元素是否用户可见
print display

# driver.maximize_window()      #浏览器窗口最大化
wsize = driver.set_window_size(1000,1000)     #窗口大小设置
print "窗口大小 1000x1000"

# driver.get_screenshot_as_file("D:\\program\\bi.jpg")  #截图并保存本地位置
# driver.get_screenshot_as_file("D:\\image\\imagename %s.png" % datetime.now().strftime("%Y%m%d.%H%M%S.%f")[:-3])
# driver.back()      #返回上一页
# driver.forward()       #返回下一页

# driver.implicitly_wait(2)     #隐式地等待一个无素被发现或一个命令完成
# driver.close()	    #关闭当前窗口
# driver.quit() 	#结束进程,关闭所有的窗口
time.sleep(1)

# ################### 元素定位方法 #########################
# find_element_by_id()
# find_element_by_name()
# find_element_by_class_name()
# find_element_by_tag_name() 不常用
# find_element_by_link_text()
# find_element_by_partial_link_text()

# find_element_by_xpath()
# find_element_by_css_selector()

# <input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">   #标签
# driver.find_element_by_class_name("s_ipt").send_keys(u"邮箱")

# <a class="mnav" name="tj_trhao123" href="http://www.hao123.com">hao123</a>  #标签
# driver.find_element_by_link_text("hao123").click()
# driver.find_element_by_partial_link_text("o123").click()

# ############ xpath定位 #############
# driver.find_element_by_xpath(".//input[@class='s_ipt']").send_keys("xiaohui")   #通过class属性(*)/标签 (input)定位
# driver.find_element_by_xpath(".//*[@id='kw'and @autocomplete='off']").send_keys("xiaohui")   #不想制定标签名称,可以用*号表示任意标签 ,and、or关联定位
# driver.find_element_by_xpath(".//td[@id='se-setting-3']/select/option[2]").click()   #层级定位

# ###模糊匹配
# driver.find_element_by_xpath(".//*[contains(@id,'kw')]").send_keys("xiaohui")
# driver.find_element_by_xpath(".//*[contains(text(),'hao123')]").click()
# driver.find_element_by_xpath("//li/a/span[contains(text(),'部门设置')]").click()

# driver.find_element_by_xpath(".//*[matchs(text(),'hao123')]").click()  #正则表达式

# ############ css定位 ####################
# driver.find_element_by_css_selector("#kw").send_keys("xiaohui")    #通过id属性定位(需添加#)
# driver.find_element_by_css_selector(".s_ipt").send_keys("xiaohui")   #通过clsaa属性定位(需添加点)
# driver.find_element_by_css_selector("[name='wd']").send_keys("xiaohui")    #通过anme属性定位
# driver.find_element_by_css_selector("input.s_ipt").send_keys("xiaohui")    #通过标签与class属性的组合定位
# driver.find_element_by_css_selector("input[id = 'kw']").send_keys("xiaohui")   #通过标签与其他属性的组合定位

# <a href="http://news.baidu.com" name="tj_news">新 闻</a>     #标签
# driver.find_element_by_css_selector("a[name =\"tj_trnews\"]").click()
#  <a class="RecycleBin xz" href="javascript:void(0);">       #标签
# driver.find_element_by_css_selector("a.RecycleBin").click()

# 层级关系 如xpath: //form[@id='form']/span/input
# driver.find_element_by_css_selector("form#form>span>input'").send_keys("xiaohui")
# 索引(标签option)option:nth-child()定位子元素
# driver.find_element_by_css_selector("select#nr>option:nth-child(3)").click()
# driver.find_element_by_css_selector("input[id = 'kw'][name = 'wd']").send_keys("xiaohui")   #逻辑运算

# ###################### 操作元素 ##################
# #模拟键盘
# driver.find_element_by_id("kw").clear()   #清空输入框
# driver.find_element_by_id("su").submit()  #回车键
# driver.find_element_by_id("su").send_keys(Keys.ENTER)   #模拟enter键操作回车按钮
# send_keys(Keys.CONTROL,'c')   #复制按钮(黏贴剪切类似)
# send_keys(Keys.BACK_SPACE)  #删除键
# send_keys(Keys.SPACE)  #空格键
# send_keys(Keys.F5)  #模拟F5键

# 鼠标左键:click_and_hold()
# 右击鼠标:context_click()
# 双击鼠标:double_click()
# 鼠标悬停:move_to_element()
# 拖动鼠标:drag_and_drop()

# #鼠标悬停在搜索设置按钮上
# mouse = driver.find_element_by_link_text("设置")
# ActionChains(driver).move_to_element(mouse).perform()
# #拖动鼠标
# element = driver.find_element_by_name("source")   #定位元素的原位置
# target = driver.find_element_by_name("target")    #定位元素要移动到的目标位置
# ActionChains(driver).drag_and_drop(element, target).perform()    #执行元素的移动操作

# ###########多窗口、句柄(不同窗口唯一标识)
# h = driver.current_window_handle  #获取当前窗口句柄
# all_h = driver.window_handles     #获取所有窗口句柄
# print h
# 在新窗口打开链接
newwindow = 'window.open("http://www.hao123.com/")'
driver.execute_script(newwindow)
# 切换到新的窗口
handles = driver.window_handles
driver.switch_to_window(handles[-1])

#   打开课工场网站主页【第一个窗口】
# driver = webdriver.Chrome()
# driver.get('http://www.kgc.cn/')
# #   点击全部课程,进入课程库【第二个窗口】
# driver.find_element_by_link_text('全部课程').click()
# time.sleep(3)
# #   使用第一种方法切换浏览器【切换到第二个窗口】
# windows = driver.window_handles
# driver.switch_to.window(windows[-1])
# time.sleep(3)

# #使用第二种方法切换浏览器【切换到第二个窗口】
# window_1 = driver.current_window_handle
# windows = driver.window_handles
# for current_window in windows:
#     if current_window != window_1:
#         driver.switch_to.window(current_window)
# time.sleep(3)
# #   点击课程库中的某个课程,进入课程详情界面【在第二个窗口页面进行元素点击操作,来判断窗口是否切换成功】
# driver.find_element_by_xpath('//*[@id="yw1"]/ul/li[2]').click()
# time.sleep(3)

# ############## 获取页面所有链接地址 ######################
# url_list = re.findall("href=\'(.*?)\'",page,re.s)
# url_all = []
# for url in url_list:
#     if "http" in url:
#         print url
#         url_all.append(url)
# print url_all

# ########### iframe #################
# iframe id="x-URS-iframe" frameborder="0" name=""   #标签
# driver.switch_to.frame("x-URS-iframe")
# 从frame2再切回frame1,相当于后退
# driver.switch_to.parent_frame()
# 无id情况
# iframe = find_element_by_xpath("//div/iframe")
# driver.switch_to.frame(iframe)
# driver.switch_to.default_content()  #释放iframe,返回主界面

# ######## 子列选择 ########
# s = driver.find_element_by_id("nr")
# Select(s).select_by_index(2)
# Select(s).select_by_value("20")
# Select(s).select_by_visible_text("每页显示50条")

# deselect_all()          # 取消所有选项
# deselect_by_index()      #取消对应 index 选项
# deselect_by_value()      #取消对应 value 选项
# deselect_by_visible_text()   #取消对应文本选项
# first_selected_option()      #返回第一个选项
# all_selected_options()       #返回所有的选项

# 操作 select后导致百度的搜索设置按钮时,点保存设置按钮,alert 弹出没弹出
Select(s).select_by_visible_text("每页显示 50 条")
driver.find_element("class name", "prefpanelgo").is_selected()  # 没点击之前,判断是否选中元素
# 方法一:先点父元素
# driver.find_element("id", "gxszButton").click()
# driver.find_element("class name", "prefpanelgo").click()
# 方法二:用 js 直接去点击
js = 'document.getElementsByClassName("prefpanelgo")[0].click();'
driver.execute_script(js)

# ######## 弹出框处理 ########
# alert\confirm\prompt 弹出框操作主要方法有
# text    #获取文本值
# accept()       #点击"确认"
# dismiss()      #点击"取消"或者右上角的x,关闭弹出
# send_keys()    #输入文本值 --仅限于 prompt,在 alert 和 confirm 上没有输入框

# driver.find_element_by_id("prompt").click()
# t = driver.switch_to_alert()   #转换到alert
# t.send_keys("hello")
# t.accept()

# ######## 单选框和复选框 ########
# s = driver.find_element_by_xpath(".//*[@type='che']")     #复选框全部勾选
# for i in s:
#     i.click()
# s = driver.find_element_by_id("boy").is_selected()    #未点击前,判断选项框状态
# print s
# driver.find_element_by_id("boy").click()
# r = driver.find_element_by_id("boy").is_selected()    #点击后,判断元素是否为选中状态
# print r

# ###### table定位 ############
# driver.find_element_by_xpath(".//*[@id='myTable']/tbody/tr[2]/td[1]")


# #######  文件上传 ##############
# 点开编辑器图片
# driver.find_element_by_css_selector("img.mceIcon").click()
# time.sleep(3)
# # 定位所有 iframe,取第二个
# iframe = driver.find_elements_by_tag_name('iframe')[1]
# # 切换到 iframe 上
# driver.switch_to_frame(iframe)
# # 文件路径
# driver.find_element_by_name('file').send_keys(r"D:\test\xuexi\test\14.png")

# #上传本地文件:upload.sendKeys(r"本地文件路径")

# ####### 获取cookies ##########
# print driver.get_cookies()
# print "--------------------------"
# driver.delete_cookie(name="BIDUPSID")      #删除指定cookies
# print "--------------------------"
# print driver.get_cookie(name="PSTM")
# print "--------------------------"
# delete_all_cookies()            #删除所有cookies
# c1 = {u'domain': u'.cnblogs.com',
#         u'name': u'.CNBlogsCookie',
#         u'value': u'xxxx',
#         u'expiry': 1491887887,
#         u'path': u'/',
#         u'httpOnly': True,
#         u'secure': False}
# c2 = {u'domain': u'.cnblogs.com',
#         u'name': u'.Cnblogs.AspNetCore.Cookies',
#         u'value': u'xxxx',
#         u'expiry': 1491887887,
#         u'path': u'/',
#         u'httpOnly': True,
#         u'secure': False}
# driver.add_cookie(c1) # 添加 2 个值
# driver.add_cookie(c2)
# driver.refresh()

# ############### js处理滚动条 ###########
# js="var q=document.documentElement.scrollTop=10000"     #0滑至页顶;1000滑至页底,0-1000随意设置滚动条
# driver.execute_script(js)
#
# js = 'document.geyElementByID("keed").scrollLeft=1000'  #0左滑;1000右滑,0-1000随意设置滚动条
# js = 'document.geyElementByClassName("scroll")[0].scrollLeft=1000'
# driver.execute_script(js)
#
# js ="window.scrollTo(100,500);"     #设置滚动条x,y位置
# driver.execute_script(js)
#
# target = driver.find_element_by_link_text("社 交")    #跳至元素目标位置
# driver.execute_script("arguments[0].scrollIntoView();",target)

# scrollHeight   #获取对象的滚动高度。
# scrollLeft    #设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。
# scrollTop     #设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。
# scrollWidth   #获取对象的滚动宽度。

# ######### js去掉readonly ##########
# js = 'document.getElementById("train_date").removeAttribute("readonly");'
# driver.execute_script(js)
# driver.find_element_by_id("train_data").clear()
# driver.find_element_by_id("train_data").send_keys("2017-12-25")
# # 用 js 方法输入日期
# js_value = 'document.getElementById("train_date").value="2017-12-25"'
# driver.execute_script(js_value)

# ############ js去掉target="_blank" ######################
# js = 'document.getElementsByClassName("mnav")[0].target="";'
# driver.execute_script(js)

######## js点击元素 ############
js = 'document.getElementsByClassName("prefpanelgo")[0].click();'
driver.execute_script(js)

# ############ js处理多窗口 ######################
# <div id="gxszButton">
#        <a class="prefpanelgo" href="#">保存设置</a>
#        <a class="prefpanelrestore" href="#">恢复默认</a>    #标签
# js = 'document.getElementsByClassName("prefpanelgo")[0].click();'
# driver.execute_script(js)


# #### 爬页面源码 #########
# page = driver.page_source
# # print page
# #非贪婪匹配
# url_list = re.findall('href=\"(.*?)\"',page,re.S)
# url_all = []
# for url in url_list:
#     if "http" in url:
#         print url
#         url_all.append(url)
# # 最终的 url 集合
# print url_all

#######
xxs = driver.find_elements_by_css_selector("span.tree-title")
for xx in xxs:
    if "人事部" in xx.text:
        xx.click()


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_28905427/article/details/80701834

智能推荐

apache php日志 (os 64)指定的网络名不再可用,解决win 03下Apache[warn] (OS 64)指定的网络名不再可用。..._weixin_39726971的博客-程序员宅基地

windows server 2003下配置Apache,当访问人数很多的时候就会在Apache的错误日志里发现好多“[warn] (OS 64)指定的网络名不再可用。: winnt_accept: Asynchronous AcceptEx failed.”这可能是由于Apache与windows的不兼容引起,官方已经把此问题收录进BUG列表,但始终没有理想的解决办法。近日,笔者也遇到了这样...

正则表达式速记口诀_不懂代码的小石的博客-程序员宅基地

正则表达式口诀及常用正则签于网上太多的介绍都是一篇凶悍的短文,边看边理解可以,帮助记忆不行。又受五笔字型字根表口诀“白手看头三二斤…”的启发,试作“正则表达式助记口诀”又名“正则打油诗”,版本0.1,绝对原创,仿冒必究,:)注:本文仅为学习正则时为了便于记忆而作,不能代替系统而全面的学习过程,错漏之处,敬请指正!正则其实也势利,削尖头来把钱揣; (指开始符号^和结尾符号$)特殊符号认不了...

解决build path contains duplicate entry:'src' for project 'XXX'问题_EricFantastic的博客-程序员宅基地

导入新项目到eclipse时,会出现报错build path contains duplicate entry:'src' for project 'XXX';我的问题是之前导入了一个相同的项目,但后来删除了,再导入该项目的新版本就引发了该问题;原因是前一个项目的.classpath文件还是存在于eclipse中,所以,只需要删除需要导入项目的.classpath文件即可。

量化投资学习——数字货币共识机制介绍_量化橙同学的博客-程序员宅基地

最普遍的共识机制是PoW和PoS。什么是PoW?PoW(Proof of work)即工作量证明机制,PoW机制是比特币等需要挖矿币种的通用机制,对于重复性小概率事件来说,出示结果同时就证明了工作量。具体到应用,就是工作越多,收益越大。这种思想被广泛地使用在我们的生活中。比如近期火爆的“吃鸡”游戏(绝地求生),不考虑外-挂的前提下,玩家在一场游戏中成功活到最后的概率很小,如果一个...

[DB]-Redis的事务和锁机制_xyzhang2018的博客-程序员宅基地

1. Redis事务、锁机制1.1 Redis事务的定义 与MySql不同 ,Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主要作用就是串联多个命令防止别的命令插队。1.2 Multi、Exec、discard从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。组队的过程中可以通过discard来放弃组

PHP语法分析器:RE2C && BISON 总结_weixin_43224306的博客-程序员宅基地

在这之前,我曾经尝试过一个项目,就是将我们的PHP代码自动生成so扩展,编译到PHP中,我叫它 phptoc。但是由于各种原因,暂停了此项目。写这篇文章一是因为这方面资料太少,二是把自己的收获总结下来,以便以后参考,如果能明白PHP语法分析那对PHP源码的研究会更上一层楼地 ^.^…我尽可能写的通俗易懂些。这个项目思路源于facebook的开源项目 HipHop .其实我对这个项目...

随便推点

KAFKA跨主机部署网络不通解决思路_weixin_30618985的博客-程序员宅基地

KAFKA跨主机部署网络不通解决思路问题背景:Kafka的部署不仅需要集群可用,同时需要对orderer节点可连,这就是为什么有的时候,kafka集群本身没问题,但是orderer却总是报错。为了试验kafka剥离方案的可行性,跨阿里云网络和内网进行BAAS部署。部署环境如下:K8s部署在阿里云环境上,192.168.8.108可连外网,作为master;192.168.8....

HTML5 manifest离线缓存_weixin_33722405的博客-程序员宅基地

简介离线访问对基于网络的应用而言越来越重要。虽然所有浏览器都有缓存机制,但它们并不可靠,也不一定总能起到预期的作用。HTML5 使用 ApplicationCache 接口解决了由离线带来的部分难题。使用缓存接口可为您的应用带来以下三个优势:离线浏览 - 用户可在离线时浏览您的完整网站速度 - 缓存资源为本地资源,因此加载速度较...

IBM Power系统显卡分辨率调节方法_服务器技术研究的博客-程序员宅基地

关于显卡分辨率调节,可以在启动参数里面进行设置,具体分辨率请根据自己的显示器情况进行设置。在系统下可以用fbset进行设置,但是这个工具不是默认安装的,需要下载安装。具体调节参数请参考如下说明:https://www.kernel.org/doc/html/latest/fb/matroxfb.htmlSwitching modes is done using the video=matroxfb:vesa:… boot parameter or using fbset program.If y

【noip2017游记】退役 ?_weixin_30342209的博客-程序员宅基地

被期中考的理综狠狠欺负一顿之后滚回来写游记大概也是最后一次写游记了吧一种在退役边缘徘徊的感觉郁结了很久,其实它可能一直都在,从一开始就在【游记】day0从学农回来也就在学校打了三场模拟赛 fri傍晚去二中附近的酒店感人 学校居然专车送看了一点点板子之后睡了 没有失眠day1前30min看题T1:卧槽什么鬼玩意 怕是没有学过小学奥数T2:以往T1难度?...

滚动条滚动到页面底部继续加载的处理实例_ajb11683的博客-程序员宅基地

  这个实例应该说可以很简单,直接使用jQuery的方法来处理也是可以的。但本文底层使用原生的js来处理,遇到一些小知识点可以分析一下也算有所得。  原理很简单,就是为window添加一个scroll事件,浏览器每次触发scroll事件时判断是否滚动到了浏览器底部,如果到了底部则加载新数据。关键是计算滚动条是否滚动到了浏览器底部,算法如下  滚动条卷起来的高度 + 窗口高度 &g...

高清视频传输系统保障城市整体监控传输网络安全_光网视PoE交换机的博客-程序员宅基地

高清视频传输系统传输系统是整个社会治安视频监控网络的数据传送平台,承担着平安城市从接入点中心以之间的视频数据传输重担,是搭建整个监控网络的血脉,因此,治安视频监控网络传输系统将采用全数字化的计算机网络传输系统,从监控点的接入到监控中心的数据汇聚完全采用全数字化通道,整个传输网络结构主干万兆汇聚,千兆到监控点接入,户外接入层交换机选用宽温宽压工业级交换机产品,保证视频数据的无阻塞、无延迟传输以及与原...

推荐文章

热门文章

相关标签