杭州9期-崔文xin 发表于 2021-8-11 21:51:36

UI自动化

#创建了一个driver对象,打开一个空白浏览器
driver = webdriver.Chrome()   #通过webdriver模块调用了WebDriver类,实例化一个Chrome对象

#打开百度
# driver.get("http://www.baidu.com")

#最大化浏览器
# driver.maximize_window()

# sleep(2)

#关闭浏览器
# driver.close()

#元素定位方法
#1、id定位
# driver.find_element_by_id('kw').send_keys("多测师")
#2、name定位
# driver.find_element_by_name('wd').send_keys("多测师")
#3、class定位
# driver.find_element_by_class_name('s_ipt').send_keys("多测师")

#4、link_text定位精准的定位链接
# driver.find_element_by_link_text("o123").click()
# 5、partial_link_text模糊匹配定位
# driver.find_element_by_partial_link_text("ao1").click()

#6、javascipt定位var是javascript里面用来定义变量的,a就是一个变量
# js = 'var a=document.getElementById("kw").value="多测师"'
# driver.execute_script(js)

#7、tag_name定位
# driver.find_element_by_tag_name("input").send_keys("多测师")#只适合定位页面中只有一个input标签的场景
# s = driver.find_elements_by_tag_name("input")#定位到所有的input标签,并放入一个列表当中
# for i in s:
#   if i.get_attribute('id') == 'kw':#i就是一个一个的input标签对象,当判断这个标签的id属性为kw时
#         i.send_keys("多测师") #就在该input标签中输入“多测师”

# 8、xpath定位
#xpath的相对路径写法
# #两个//表示某个层级下,*代表任意标签,@符号表示的是标签的一个属性
# driver.find_element_by_xpath('//*[@id="kw"]').send_keys("多测师")
# driver.find_element_by_xpath('//*[@name="wd"]').send_keys('多测师')
# driver.find_element_by_xpath('//*[@class="s_ipt"]').send_keys('多测师')
# driver.find_element_by_xpath('//*[@autocomplete="off"]').send_keys('多测师')
#上级定位:父级定位
# driver.find_element_by_xpath('span[@class="bg s_ipt_wr quickdelete-wrap"]/input').send_keys("多测师")
#上上级定位:
# driver.find_element_by_xpath('//form[@id="form"]/span/input').send_keys("多测师")
#组合定位方法:
# driver.find_element_by_xpath('//*[@id="kw" and @class="s_ipt"]').send_keys("多测师")

#xpath的绝对路径写法:从最开始的标签标签
# driver.find_element_by_xpath('/html/body/div/div/div/div/div/form/span/input').send_keys("多测师")

# 9、css定位
# driver.find_element_by_css_selector("#kw").send_keys("多测师")#id选择器定位
# driver.find_element_by_css_selector('.s_ipt').send_keys("多测师")#class选择器定位
#
# driver.find_element_by_css_selector('').send_keys('多测师')   #属性定位
# driver.find_element_by_css_selector('').send_keys("多测师")
# driver.find_element_by_css_selector('').send_keys("多测师")
#
# driver.find_element_by_css_selector('').send_keys("多测师")#组合定位
# driver.find_element_by_css_selector('span>input').send_keys('多测师')    #上级定位
# driver.find_element_by_css_selector('form>span>input').send_keys("多测师")   #上上级定位


#id,name,class三种定位方法又叫做静态定位方法

#1、定位文本框,密码输入框和按钮
# driver = webdriver.Chrome()

# driver.get("http://cms.e70w.com/manage/login.do")
# driver.maximize_window()
# sleep(2)

# driver.find_element_by_id("userAccount").send_keys("admin")#输入账号
# sleep(1)
# driver.find_element_by_id('loginPwd').send_keys("123456")   #输入密码
# sleep(1)
# driver.find_element_by_id('loginBtn').click()   #点击登录

#2、通过send_keys方法上传文件
#如果上传文件的标签不是input标签,则需要安装autoIt3编写windows脚本上传
# driver.get('file:///C:/Users/skybi/Desktop/tk/upload_file.html')
# driver.maximize_window()
# sleep(2)
#第一种方法
# driver.find_element_by_id('file').send_keys('D:\python.txt')
#第二种方法
# element = driver.find_element_by_id('file')#定位到上传文件的按钮,生成一个标签对象
# element.send_keys("D:\python.txt")#再用这个对象调用send_keys方法上传文件

#3、定位百度隐藏框,鼠标悬停操作
# driver.get("https://www.baidu.com/")
# driver.maximize_window()
# sleep(1)
#第一种方法:点击设置后,再点击搜索设置(获取搜索设置的元素属性时,点击右键,点击【检查】,直接跳转至该元素位置)
# driver.find_element_by_id("s-usersetting-top").click()   #点击设置
# sleep(1)
# driver.find_element_by_class_name('setpref').click()   #点击搜索设置
# sleep(1)
# driver.find_element_by_link_text('保存设置').click()    #点击保存设置
# sleep(1)
# alter = driver.switch_to.alert   #进入到alter弹框中
# print(alter.text)    #获取alter弹框上的信息
# alter.accept()   #点击确定弹框
# alter.dismiss()#点击取消弹框

#第二种方法:模拟鼠标悬停
# from selenium.webdriver.common.action_chains import ActionChains
# mouse = driver.find_element_by_id("s-usersetting-top")

#move_to_elment就是以动到“设置”这个网页元素上面,perform()是执行这个操作
# ActionChains(driver).move_to_element(mouse).perform()
# driver.find_element_by_link_text("搜索设置").click()

#4、selenium当中等待
"""
1、线程等待 ====》sleep(3)不管元素有没有加载出来就会等待3秒
2、隐式等待 ====》driver.implicitly_wait(5) 又称为只能等待,作用于全局,如果在5秒内全部网页元素加载完成则往下执行,超过5秒没有加载出来,则报错
3、显式等待 ====》webdriverwait 只需要等到某个特定的元素出现的时候,就继续往下执行
"""
#1、线程等待
# sleep(5)
# driver.find_element_by_id('kw').send_keys('多测师')

#2、隐式等待
# driver.implicitly_wait(5)
# driver.find_element_by_id('kw').send_keys("多测师")

#3、显式等待
# from selenium.webdriver.support.wait import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# from selenium.webdriver.common.by import By
#每隔0.5秒去刷新和寻找页面元素,如果找到了则往下执行,超过5秒未找到则报错(作用于特定的元素)
# WebDriverWait(driver,5,poll_frequency=0.5).until(EC.presence_of_element_located((By.ID,"kw")))
# driver.find_element_by_id("kw").send_keys("多测师")


#5、获取text文本信息
# value = driver.find_element_by_xpath('//*[@id="s-top-left"]/a').text
# 断言(使用if判断语句进行断言,判断元素的文本信息是否满足要求)
# if value == 'hao123':
#   print("获取成功")
# else:
#   print("获取失败")

#6、获取title
# title = driver.title#获取到当前页面的title,并赋值给到title这个变量接收
#第一种断言方法
# if title == '百度一下,你就直到':
#   print('获取成功')
# else:
#   print("获取失败")

#第二种断言方法(使用assert断言,如果断言成功,则代码继续往下执行,如果断言失败,则报错)
# assert title == "百度一下,你知道"


#7、获取窗口的大小
size = driver.get_window_size()   #返回一个width和height的字典
print(size)

#8、打开一个新的窗口
driver.get("http://www.baidu.com")
win = 'window,open("http://www.taobao.com")'#编写一个打开一个窗口的脚本windows脚本
driver.execute_script(win)   #执行windows脚本,打开一个新的窗口

#9、刷新窗口
driver.get("http://www.baidu.com")
driver.maximize_window()
sleep(1)
driver.refresh()#刷新当前窗口

#10、返回上一步
driver.get("http://www.baidu.com")
driver.maximize_window()
sleep(1)
driver.find_element_by_id('kw').send_keys('多测师')
sleep(1)
driver.find_element_by_id('su').click()
sleep(1)
driver.back()   #返回上一步

#11、关闭当前窗口
driver.get("http://www.baidu.com")
driver.maximize_window()
sleep(1)
win = "window.open('http://www.taobao.com')"
driver.execute_script(win)
sleep(1)
driver.close()   #关闭当前窗口
driver.quit()    #关闭所有窗口

#12、窗口切换
driver.get("http://www.baidu.com")
driver.maximize_window()
sleep(1)
win = "window.open('http://www.taobao.com')"
driver.execute_script(win)
sleep(1)
win2 = "window.open('http://www.jd.com')"
driver.execute_script(win2)

title = driver.title
print(title)#百度一下,你就知道

handle = driver.current_window_handle#获取当前窗口的handle====》句柄
print(handle)

#1、通过索引切换窗口(只适用于窗口少的情况)
all_handle = driver.window_handles    #获取所有窗口的句柄,返回一个所有句柄的列表
driver.switch_to.window(all_handle[-1])
title = driver.title
print(title)

#2、通过for循环handle列表,实现窗口的切换
all_handle = driver.window_handles#获取所有窗口的句柄,返回一个所有句柄的列表
for i in all_handle:
    driver.switch_to.window(i)
    title = driver.title
    if title == '京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!':
      break
title2 = driver.title
print(title2)

页: [1]
查看完整版本: UI自动化