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()


猜你喜欢

转载自blog.csdn.net/qq_28905427/article/details/80701834