2022.4.17-2022.4.18学习总结

2022.4.17-2022.4.18学习总结,第1张

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.明日计划,性能测试相关

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/715232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存