基础版
from selenium import webdriver #导入webdriver
import time
from selenium.webdriver import ActionChains #导入动作链,用于
# #导入selenium与浏览器得服务webdrive
# #通过手动方式启动webdrive服务
# mydrive = webdriver.Firefox()
# #实例化浏览器驱动对象,这个对象是firefox浏览器,使用不同的浏览器要实例化对应的类
# #相当于启动了浏览器
# time.sleep(2)
# mydrive.maximize_window()
# #使浏览器最大化
# mydrive.get('http://192.168.233.128:8080/WoniuSales1.4/')
# #get方法帮助我们url地址,打开浏览器访问界面
# time.sleep(2)
# mydrive.find_element_by_id('username').click()
# #通过id点击定位到搜索框元素
# mydrive.find_element_by_id('username').clear()
# #如果搜索框已有内容,清除内容
# mydrive.find_element_by_id('username').send_keys('admin')
# #输入搜索框要搜索的东西
# mydrive.find_element_by_id('password').click()
# mydrive.find_element_by_id('password').clear()
# mydrive.find_element_by_id('password').send_keys('admin123')
#
# # time.sleep(2)
# # mydrive.find_element_by_id('su').click()
# #通过元素定位到百度一下,并点击搜索
#浏览器切换界面操作
class Webdrivetest:
def __init__(self):
self.drive = webdriver.Firefox()
#定义方法属性为实例化浏览器驱动
# self.drive.maximize_window() #浏览器最大化
# self.drive.implicitly_wait(30)
#设置等待时间,全局通用,每步都等待
#界面切换使用方法
def switch_window(self): #定义打开浏览器方法
self.drive.get('http://www.woniuxy.com')
#get方法帮助我们url地址,打开浏览器访问界面
#也就是产生第一个窗口
first_window = self.drive.current_window_handle
#当前窗口身份标识
self.drive.find_element_by_link_text('自研教材').click()
#通过链接,打开第二个窗口
two_window = self.drive.current_window_handle
time.sleep(5)
else_window =self.drive.window_handles
#返回存放窗口身份的结果为列表储存
self.drive.switch_to.window(else_window[0])
#通过列表下标切换窗口
#ifrname方法嵌套页面定位元素方法
def switch_iframe(self):
self.drive.get('http://www.woniuxy.com/train/teacher.html') ##get方法帮助我们url地址,打开浏览器访问界面
iframe1 = self.drive.find_element_by_id('iframe_company_mini') #定位到第一个iframe标签,返回的是一个元素
self.drive.switch_to.frame(iframe1)
#让drive进入切换到iframe1这个区域
iframe2 = self.drive.find_element_by_xpath('//iframe[@class="ke-edit-iframe"]') #定位到第二个iframe标签,返回的是一个元素
self.drive.switch_to.frame(iframe2)
#让drive进入切换到iframe2这个区域
#找目标元素
self.drive.find_element_by_xpath('/html/body').click()
#定位到目标元素并点击
self.drive.find_element_by_xpath('/html/body').send_keys('this is test') #输入要发送的内容
#如果进入iframe要切出来,先切换到父级
#self.drive.switch_to.parent_frame() #切换到父级
#如果要从iframe切换到主界面
#self.drive.switch_to.default_content()
#切换到主界面,不再任何iframe
#从某处拖拽到某处方法
def drag_drop(self):
self.drive.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
#get方法帮助我们url地址,打开浏览器
iframe1 = self.drive.find_element_by_id('iframeResult')
#定位找到iframe标签
#切换到iframe
self.drive.switch_to.frame(iframe1)
#找元素 要拖拽的元素和目标位置元素
source_element = self.drive.find_element_by_id('draggable')
#被拖拽元素
target_element = self.drive.find_element_by_id('droppable')
#放入目标元素
actions = ActionChains(self.drive)
#实例化一个动作连对象,指定drive执行
# 添加拖拽的动作,参数分别是被拖拽对象和放入目标
actions.drag_and_drop(source_element,target_element)
#执行动作
actions.perform()
#有弹窗点击确定
self.drive.switch_to.alert.accept()
#qq空间写日志 主要是iframe使用练习
def switch_ifrname1(self):
self.drive.get('https://qzone.qq.com/')
#get方法帮助我们url地址,打开浏览器
# time.sleep(8)
iframe1 = self.drive.find_element_by_id("login_frame")
#通过id定位到第一个iframe1
self.drive.switch_to.frame(iframe1) #进入第一个iframe
time.sleep(3)
self.drive.find_element_by_id('img_out_1175134916').click()
#通过属性定位到头像位置并点击
time.sleep(25)
self.drive.find_element_by_link_text('日志').click()
#通过超链接定位到日志并点击
time.sleep(3)
iframe2 = self.drive.find_element_by_class_name('app_canvas_frame')
#因为写日志在iframe里,所以通过属性名定位到到第二个iframe1
self.drive.switch_to.frame(iframe2) #进入到第二个iframe
self.drive.find_element_by_class_name("inner_wrap").click() #定位到写日志并点击
time.sleep(2)
self.drive.find_element_by_id('blog-title-input').click()
#定位到日志标题输入框并点击
self.drive.find_element_by_id('blog-title-input').send_keys('自动化测试') #标题输入框写入内容
time.sleep(2)
iframe3 = self.drive.find_element_by_id('blogContent_Iframe') #因为日志内容输入框在iframe内,所以在此定位iframe
self.drive.switch_to.frame(iframe3) #进入到iframe
self.drive.find_element_by_class_name('blog_details_20120222').click() #定位到日志内容输入框并点击
self.drive.find_element_by_class_name('blog_details_20120222').send_keys('这是自动化搞得哦') #给日志内容输入框写入内容
# self.drive.switch_to.parent_frame()
# time.sleep(2)
# self.drive.find_element_by_id('saveBlogButton').click()
# input标签上传方法 使用send_keys
def switch_picture(self):
self.drive.get('https://www.bejson.com/ ')
self.drive.find_element_by_link_text('前端').click()
time.sleep(2)
self.drive.find_element_by_link_text('图片压缩工具').click()
time.sleep(2)
self.drive.find_element_by_xpath("//input[@type='file']").send_keys('C:\\Users\\admin\\Desktop\\psb.jpg')
time.sleep(2)
if __name__ == '__main__':
test1 = Webdrivetest()
test1.drag_drop()
from selenium import webdriver
import time
from selenium.webdriver import ActionChains #导入动作链
from selenium.webdriver.support.select import Select #下拉框导入的
from selenium.webdriver.support.wait import WebDriverWait #显示等待需导入
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class Webdrivetest:
#下拉框语法
def select_method(self):
self.drive.get('http://www.woniuxy.com/live')
#定位到下拉框菜单的位置
target_element=self.drive.find_element_by_id('searchlivebymajor')
#选择下拉框要打开的内容,有三种方式,
Select(target_element).select_by_visible_text('UI全链路设计')
#select_by_index(index) index从 0 开始
#select_by_value(value) value是option标签的一个属性值,并不是显示在下拉框中的值
#select_by_visible_text(text) visible_text是在option标签中间的值,是显示在下拉框的值
#下拉框随机取值
gender=driver.find_element_by_id('childsex')
import random Select
random_index=random.randint(0,len(Select(gender).options)-1)
Select(gender).select_by_index(random)index)
#鼠标滚轮滚顶方式
def do_sroll(self):
self.drive.get('http://www.woniuxy.com/train/teacher.html')
#定位到滚轮要到位置
target_element = self.drive.find_element_by_xpath('//div[contains(text(),"联系我们")]')
#关键字执行execute_script js代码
self.drive.execute_script('arguments[0].scrollIntoView()',target_element)
#显示等待方式
def webdrive_wait1(self):
self.drive.get('http://www.woniuxy.com/train/teacher.html')
wait1 = WebDriverWait(self.drive,30,0.5) #实例化wait对象
iframe1=wait1.until(EC.presence_of_element_located((By.ID,'iframe_company_mini')))
self.drive.switch_to.frame(iframe1)
iframe2 = wait1.until(EC.presence_of_element_located((By.XPATH, '//iframe[@class="ke-edit-iframe"]')))
self.drive.switch_to.frame(iframe2) #
self.drive.find_element_by_xpath('/html/body').click() # 定位到目标元素并点击
self.drive.find_element_by_xpath('/html/body').send_keys('this is test') # 输入要发送的内容
#对时间等待参数化
def custom_wait(self,driver,*locator,timeout=30,FREQ=0.5):
wait = WebDriverWait(driver,timeout,FREQ)
element = wait.until(EC.presence_of_element_located(*locator))
def webdrive_wait2(self):
iframe1_locator=(By.ID,'iframe_company_mini')
#定义变量要定位的第一个iframe
iframe2_locator=(By.XPATH, '//iframe[@class="ke-edit-iframe"]') #定义变量要定位的第一个iframe
self.drive.get('http://www.woniuxy.com/train/teacher.html')
iframe1 = self.custom_wait(self.drive,iframe1_locator)
#传参进入第一个iframe
self.drive.switch_to.frame(iframe1)
iframe2 = self.custom_wait(self.drive, iframe2_locator)
self.drive.switch_to.frame(iframe2)
self.drive.find_element_by_xpath('/html/body').click()
# 定位到目标元素并点击
self.drive.find_element_by_xpath('/html/body').send_keys('this is test')
def webdrive_wait3(self):
# iframe1_locator = (By.ID, 'iframe_company_mini') # 定义变量要定位的第一个iframe
# iframe2_locator = (By.XPATH, '//iframe[@class="ke-edit-iframe"]') # 定义变量要定位的第一个iframe
self.drive.get('http://www.woniuxy.com/train/teacher.html')
wait = WebDriverWait(self.drive,30,0.5)
#lamdba传递参数
iframe1 = wait.until(lambda drive:drive.find_element_by_id('iframe_company_mini'))
self.drive.switch_to.frame(iframe1)
iframe2 = wait.until(lambda drive:drive.find_element_by_xpath('//iframe[@class="ke-edit-iframe"]'))
self.drive.switch_to.frame(iframe2)
self.drive.find_element_by_xpath('/html/body').click() # 定位到目标元素并点击
self.drive.find_element_by_xpath('/html/body').send_keys('this is test') # 目标元素输入内容