1.selenium更多浏览器 *** 作
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('file:///F:/BaiduNetdiskDownload/09%20UI%E8%87%AA%E5%8A%A8%E5%8C%96%E8%A7%86%E9%A2%91%E9%85%8D%E5%A5%97%E7%AC%94%E8%AE%B0(1)/UI%E8%87%AA%E5%8A%A8%E5%8C%96/day01_UI%20%E8%87%AA%E5%8A%A8%E5%8C%9601/01_%E8%B5%84%E6%96%99/page/%E6%B3%A8%E5%86%8CA.html')
#下拉框,By.CSS_SELECTOR,'[value="gz"]'
driver.find_element(By.CSS_SELECTOR,'[value="gz"]').click() #广州
driver.find_element(By.CSS_SELECTOR,'[value="sh"]').click() #上海
driver.find_element(By.CSS_SELECTOR,'[value="bj"]').click() #北京
#下拉框方式二,用select类
from selenium.webdriver.support.select import Select #Select S大写
sel = driver.find_element(By.ID,'selectA') #先定位
se = Select(sel) #类
#三选一
se.select_by_index(1) #从第0个索引开始
se.select_by_value('sz') #也可以用value
se.select_by_visible_text('A北京') #也可以用文本
#d出框
'''
应⽤场景: ⻚⾯ *** 作过程中, ⼀旦出现d窗, 如果不进行处理, 则后续 *** 作无法执行!
d窗分类: 1> 系统d窗(JS 实现) 2> 自定义d窗(前端代码封装)
'''
#系统d窗处理(js),凡是通过 JS 实现的系统d窗, 用不了F12
driver.find_element(By.ID,'prompta').click() #点击一个JSd窗
alert = driver.switch_to.alert #切换到d窗
print(alert.text) #获取文本值
alert.send_keys('44444') #这里send不进去??
alert.accept() #去除d窗(同意)点击"确认"
#alert.dismiss() #去除d窗(移除)相当于点右上角x
#自身定义d窗,由于自定义d窗可以通过鼠标右键的检查选项获取元素信息, 因此出现自定义d窗时, 直接定义目标元素并 *** 作, 移除d窗即可
#滚动条
'''
应⽤用场景:
1. 在HTML⻚页⾯面中,由于前端技术框架的原因,⻚⾯元素为动态显示,元素根据滚动条的下拉而被加载
2. ⻚面注册同意条款,需要滚动条到最底层,才能点击同意
# 需求:打开注册⻚面A,暂停2秒后,滚动条拉到最底层, 暂停 2 秒后, 恢复
原位置
# 注意: Selenium 框架中没有专⻔门处理滚动条的⽅方法, 需要通过调用JS代码实现 *** 作
'''
js_down = "window.scrollTo(0,1000)" # 1> 准备 JS 代码: 1000 只是⼀个尽可能大的值, 不是准确值
driver.execute_script(js_down) # 2> 执行 JS 代码
sleep(2)
js_up = "window.scrollTo(0,0)" # 向上: 反向只需要将坐标归零即可
driver.execute_script(js_up)
#多窗口处理
'''
应⽤用场景: 想要 *** 作新开⻚面内的元素时, 必须先要完成窗口切换, 才能获取⽬标元素
注意: 切换窗口 *** 作需要依赖窗⼝的句柄值才能实现
'''
#每一个窗口都有一个唯一的句柄值,可以通过句柄值完成切换窗口 *** 作
driver.find_element(By.LINK_TEXT,'访问 新浪 网站').click()
chandle = driver.current_window_handle #当前窗口句柄值
ahandle = driver.window_handles #所有窗口句柄值,0是原页面,-1永远是新开的页面
print(chandle,ahandle)
print(type(ahandle)) #所有窗口句柄值是个列表
driver.switch_to.window(ahandle[0]) #切换到原页面
driver.find_element(By.ID,'userA').send_keys('切回来了')
driver.switch_to.window(ahandle[-1]) #切走到新d窗
driver.switch_to.window(ahandle[0])
driver.switch_to.window(ahandle[-1])
driver.switch_to.window(ahandle[0])
driver.find_element(By.ID,'userA').clear()
driver.find_element(By.ID, 'userA').send_keys('反复横跳试一下')
driver.switch_to.window(ahandle[-1])
driver.close() #关闭当前页面
driver.switch_to.window(ahandle[0])
#截图 *** 作
#driver.get_screenshot_as_file('./01.png') #直接截图到py的文件夹里,推荐png格式
driver.get_screenshot_as_file('./image/01.png') #可以指定文件夹路径截图
#时间戳,防止截图重名被覆盖
from time import strftime #导包,现在时间
now_time = strftime('%Y%m%d_%H%M%S') #年月日时分秒
print(now_time)
driver.get_screenshot_as_file('./image/01_{}.png'.format(now_time)) #给截图加时间戳,{}里面是时间
button = driver.find_element(By.TAG_NAME,'button') #定位元素
button.screenshot('./image/02.png') #给元素截图
button.screenshot('./image/02_{}.png'.format(now_time)) #给元素截图加时间戳
2.cookie相关
#cookie绕过原理
'''
说明: 客户端登录账号后, 将登录状态相关的 cookie 信息发送给服务器保存,
在发送请求, 携带的 cookie 信息如果和服务器保留留的一致, 则服务器认为客户
端为登录状态
应⽤用场景:
1. 实现会话跟踪,记录⽤用户登录状态
2. 实现记住密码和⾃自动登录的功能
3. ⽤户未登录的状态下,记录购物⻋车中的商品
准备:登录百度。获取cookie中的BDUSS的值,然后组成字典
'''
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
#组成字典
baiducookie = {'name':'BDUSS','value':'G1ENU5oOGtyRVZURk5iMXIxMn5OWE9mbDFJMUdIend6RHdVa0YtTVlmWTJuWVJpRVFBQUFBJCQAAAAAAAAAAAEAAABygyEMTkO94wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYQXWI2EF1ib'}
driver.add_cookie(baiducookie) #发送cookie信息给服务器
driver.refresh() #刷新,就是说新开的窗口直接登录了
print(driver.get_cookies()) #获取所有COOKIE信息
print(type(driver.get_cookies())) #是个列表
print(driver.get_cookie('BDUSS')) #获取指定cookie信息
print(type(driver.get_cookie('BDUSS'))) #是个字典
driver.quit()
3.frame相关
#frame 处理
#frame 是HTML页面的一种框架,主要作用是在当前页面中指定区域显示另一页面元素
'''
应⽤用场景: 处于 frame 中的元素, 虽然可以获取元素信息, 但是代码执行时⽆
法定位元素, 因此需要先执行 frame 切换, 才能进⾏元素定位 *** 作
常⻅见标签: 1> frameset(已经不常用) 2> iframe(常见)
类似于 *** 作d窗需要先切入d窗
'''
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('file:///F:/BaiduNetdiskDownload/09%20UI%E8%87%AA%E5%8A%A8%E5%8C%96%E8%A7%86%E9%A2%91%E9%85%8D%E5%A5%97%E7%AC%94%E8%AE%B0(1)/UI%E8%87%AA%E5%8A%A8%E5%8C%96/day01_UI%20%E8%87%AA%E5%8A%A8%E5%8C%9601/01_%E8%B5%84%E6%96%99/page/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
driver.find_element(By.ID,'user').send_keys('444')
driver.switch_to.frame('idframe1') #切换到frame,括号内传值,就完成了切换
driver.find_element(By.ID,'userA').send_keys('222')
driver.switch_to.default_content() #恢复到主页面,必须恢复到主页面才能切下一个
driver.switch_to.frame('myframe2') #切换到frame2
driver.find_element(By.ID,'userB').send_keys('5555')
4.pytest,PO设计模式过了一遍,看了个大概,需要时再回来找
5.明日计划,性能测试相关
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)