selenium build
1.selenium源码分析
安装selenium pip install
2.api讲解
webdriver
element
鼠标悬浮
下拉框处理
练习
iframe操作
# webdriver再启动的时候启动了一个server(浏览器),client(代码)
# selenium是经典的sever-client的设计模式
# 创建了一个浏览器,通过seeion去谅解我们的浏览器
#底层是通过http请求发送的调用的是浏览器原声的api,去处理我们的请求,点击,脱拽,执行之后返回结果
# selenium 3.x版本 完全用webdriver
# selenium原理,在大师兄博客里,密码besttest
selenium常见面试问题
查看源码,ctrl+点击get
from selenium import webdriver
#chrom配置
option = webdriver.ChromeOptions()
#增加启动就放大浏览器
option.add_argument("--start_maximized")
#启动浏览器
driver = webdriver.Chrome(chrome_options=option)
# #请求目标网址
driver.get('http://ui.imdsx.cn/uitester/')
# # selenium的定位方式,选择器
# #单数模式8种
# #全屏浏览器
# driver.maximize_window()
# #id定位方式
# element = driver.find_element_by_id('i1')、
#class定位
# element = driver.find_element_by_class_name('classname')
# name属性定位
# element = driver.find_element_by_name('name')
#css_selector定位方式
element = driver.find_element_by_css_selector('[placeholder="请通过ID定位元素"]') 如果多个属性相同那就在后面加一个[]中括号
把不相同属性的值添加上
# #像文本框发送字符串
element.send_keys('ui自动化测试')
#辅助模式8种
#底层实现2种
from selenium import webdriver
#chrom配置
# option = webdriver.ChromeOptions()
#增加启动就放大浏览器
# option.add_argument("--start_maximized")
#启动浏览器
# driver = webdriver.Chrome(chrome_options=option)
# #请求目标网址
# driver.get('http://ui.imdsx.cn/uitester/')
# # selenium的定位方式,选择器
# #单数模式8种
# #全屏浏览器
# driver.maximize_window()
# #id定位方式
# element = driver.find_element_by_id('i1')、
#class定位
# element = driver.find_element_by_class_name('classname')
# name属性定位
# element = driver.find_element_by_name('name')
#css_selector定位方式
# element = driver.find_element_by_css_selector(placeholder="请通过ID定位元素")
#xpath定位方式
# element = driver.find_element_by_xpath('//*[@placeholder="请通过XPATH定位元素"]')
#link text
#把滚动条拉到最上方,执行js
# driver.execute_script('window.scrollTo(0,0);')
# element = driver.find_element_by_link_text('跳转大师兄博客地址')
#包含,partial_link_text
# element = driver.find_element_by_partial_link_text('跳转')
#tag_name标签名
# element = driver.find_element_by_tag_name('input')
8种复数方式
# driver.find_elements_by_partial_link_text()
# driver.find_elements_by_class_name()
# driver.find_elements_by_id()
# driver.find_elements_by_partial_link_text()
# driver.find_element_by_xpath()
# driver.find_elements_by_name()
# driver.find_element_by_id()
# driver.find_elements_by_css_selector()
#复数模式,的返回的是相同所有元素
# element = driver.find_elements_by_tag_name('input')[0]
# #像文本框发送字符串
# element.send_keys('ui自动化测试')
# element.click()
#辅助模式8种
#底层实现2种
# driver.find_element()
# driver.find_elements()
import time
driver = webdriver.Chrome()
driver.get('http://ui.imdsx.cn/uitester/')
time.sleep(1)
#获取大小
# size = driver.get_window_size()
# #设置浏览器大小
# driver.set_window_size(1200,100)
#获取当前浏览器tag的名字,或者理解为对象
# print(driver.current_window_handle)
driver.execute_script('window.scrollTo(0,0);')
# time.sleep(2)
#返回当前浏览器所有tag的名字,很重要
element = driver.find_element_by_css_selector('[href="/new-index/"]').click()
time.sleep(3)
#获取所有浏览器的名字
print(driver.window_handles)
#返回当前url
# print(driver.current_url)
# #返回当前浏览器名
# print(driver.name)
# #页面源码
# print(driver.page_source)
# #查看title
# print(driver.title)
#进行截图
# driver.get_screenshot_as_file('测试.png')
#退出所有关于webdriver的浏览器
# driver.quit()
#退出当前浏览器
# driver.close()
# element = driver.find_element_by_css_selector('#i1')
# element.send_keys('1111')
#获取属性
# print(element.get_attribute('placeholder'))
#清除文本
# element.clear()
driver.quit()
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('http://ui.imdsx.cn/uitester/')
driver.execute_script('window.scrollTo(0,0);')
driver.find_element_by_css_selector('[href="/new-index/"]').click()
#获取打开页面
driver.switch_to.window(driver.window_handles[-1])
driver.find_element_by_css_selector('#newtag').send_keys('张宾楠我爱你')
time.sleep(2)
driver.close()
driver.switch_to.window(driver.window_handles[0])
driver.find_element_by_css_selector('#i1').send_keys('张宾楠我爱你')
time.sleep(2)
#获取属性
# print(element.get_attribute('placeholder'))
#清除文本
# element.clear()
driver.quit()
#上午学习重点,18种定位方式,8种是单数定位方式
#click send_keys clear quit close
# 3.switch_to window 结合着用 window_handles
# switch模块
#练习1
# from selenium import webdriver
# from selenium.webdriver.remote.switch_to import SwitchTo
# import time
# driver = webdriver.Chrome()
# driver.get('http://ui.imdsx.cn/new-index/')
# driver.execute_script('window.scrollTo(0,0);')
# #定位到百度ifram,进行切换
# element = driver.find_element_by_css_selector('[name="baidu-frame"]')
# #获取到百度url
# print(element.get_attribute('src'))
# #切换
# driver.switch_to.frame(element)
# time.sleep(2)
# #定位到了百度搜索框
# driver.find_element_by_css_selector('#kw').send_keys(111)
# #返回到ifarm上一层
# driver.switch_to.parent_frame()
# #获取到上一级标签页
# driver.find_element_by_css_selector('#newtag').send_keys(1111)
# time.sleep(3)
# driver.quit()
#多个跳转练习
# from selenium import webdriver
# from selenium.webdriver.remote.switch_to import SwitchTo
# import time
# driver = webdriver.Chrome()
# driver.get('http://ui.imdsx.cn/uitester/')
# driver.execute_script('window.scrollTo(0,0);')
# #定位到百度ifram,进行切换
# element = driver.find_element_by_css_selector('[name="top-frame"]')
# # 切换
# driver.switch_to.frame(element)
# #跳转到百度页面
# time.sleep(2)
# bank = driver.find_element_by_css_selector('[name="baidu-frame"]')
# driver.switch_to.frame(bank)
# time.sleep(2)
# driver.find_element_by_css_selector('#kw').send_keys(123123)
# #跳到最外层
# driver.switch_to.default_content()
# driver.find_element_by_css_selector('#i1').send_keys(11111)
# time.sleep(2)
# driver.quit()
# iframe 重点
# 1.iframe 一层一层跳转
# 2.driver.switch_to.frame(bank) 向下条一层一层
# 3.driver.switch_to.default_content() 跳到最外层
# 3.driver.switch_to.parent_frame() 向上跳一层
# from selenium import webdriver
# from selenium.webdriver.remote.switch_to import SwitchTo
# import time
# driver = webdriver.Chrome()
# driver.get('http://ui.imdsx.cn/uitester/')
# driver.execute_script('window.scrollTo(0,0);')
# driver.maximize_window()
# driver.find_element_by_css_selector('#alert').click()
# driver.find_element_by_css_selector('#confirm').click()
# time.sleep(3)
#确认
# driver.switch_to.alert.accept()
#取消
# driver.switch_to.alert.dismiss()
#获取文案
# driver.switch_to.alert.text()
#鼠标悬浮操作 action
# from selenium import webdriver
# from selenium.webdriver.remote.switch_to import SwitchTo
# import time
# driver = webdriver.Chrome()
# driver.get('http://ui.imdsx.cn/move/')
# driver.maximize_window()
# driver.execute_script('window.scrollTo(0,0);')
# from selenium.webdriver.common.action_chains import ActionChains
# action = ActionChains(driver)
#代表鼠标移动到这个位置了
http://ui.imdsx.cn/move/ 网址
# ele = driver.find_element_by_css_selector('#b')
# ale = driver.find_element_by_css_selector('#dis1')
# action.move_to_element('ale').click(ale).perform()
#id拖拽,接受两个参数,一个是原,一个是目标
# ele = driver.find_element_by_css_selector('#dragger')
# tag = driver.find_element_by_css_selector('#i1')
# action.drag_and_drop(ele,tag).perform()
# select模块
from selenium.webdriver.support.select import Select
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://ui.imdsx.cn/html/')
driver.execute_script('window.scrollTo(0,1800);')
ele = driver.find_element_by_xpath("//select[@name='city'][1]")
# 根据value进行定位,直接定位四川
Select(ele).select_by_value('3')
#根据下标进行定位
# Select(ele).select_by_index(3)
# from selenium import webdriver
# driver = webdriver.Chrome()
# driver.get('https://coding.net/login')
# element = driver.find_element_by_css_selector('[type="text"]').send_keys('18301096410')
# element2 = driver.find_element_by_css_selector('[type="password"]').send_keys(12345678)
# element3 = driver.find_element_by_css_selector('[type="submit"]')
# element3.click()
# driver.get_screenshot_as_file('测试.png')
#等待的三种方式,隐士等待,显示等待,time等待
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
#获取到windows弹框
driver.maximize_window()
#这个是每隔0.5秒搜索一次。总共10秒
# WebDriverWait(driver,10).until(EC.current_url('www.imdsx.cn'))
#不间断扫描dom,保证元素第一次出现后。隐士等待
WebDriverWait(driver,10,1).until(EC.presence_of_element_located((By.ID,'i1')))
#浏览器的按钮操作
#全屏浏览器弹框
driver.maximize_window()
#刷新
driver.refresh()
#前进
driver.forward()
#后退
driver.back()
ActionChains这个模块的作用是什么
def get_text(self,css):
'''获取元素文本信息'''
self.wait_element(css)
el = self.get_element(css)
print(el.text)
return el.text
def get_display(self,css):
'''获取元素以显示,返回结果为真或者为假'''
self.wait_element(css)
#先进行获取元素
el = self.get_element(css)
print(el.is_displayed())
return el.is_displayed()
def get_title(self):
'''获取窗口标题'''
print(self.driver.title)
return self.driver.title
def get_url(self):
'''获取url网址'''
print(self.driver.current_url)
return self.driver.current_url
def wait(self,secs):
'''隐士等待页面上所有的元素'''
self.driver.implicitly_wait(secs)