一、discuz实战
1、备注:验证码在公司中解决方案,万能验证码或屏蔽
链接参考:https://i.cnblogs.com/posts/edit;postId=13693695
解决方法一:
一、封装:登录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | ''' 讲解: 1、将论坛的登录还有点击模块管理 通过类来进行封装(给实参) 2、将论坛的登录还有点击模块管理 用例封装(给形参)且通过类的传递完成调用 加一个断言 ''' from selenium import webdriver from time import sleep class Discuz: #定义一个类 def __init__( self ): self .drvier = webdriver.Chrome() #创建浏览器对象 self .drvier.get( 'http://192.168.153.130/bbs/forum.php' ) self .drvier.maximize_window() self .drvier.implicitly_wait( 10 ) def login( self ,name,pwd): #登录模块 self .drvier.find_element_by_id( 'ls_username' ).send_keys(name) self .drvier.find_element_by_id( 'ls_password' ).send_keys(pwd) sleep( 2 ) self .drvier.find_element_by_css_selector( '.pn' ).click() def mk_login( self ): #模块管理 self .login( 'admin' , '123456' ) #通过self来引用登录模块 self .drvier.find_element_by_link_text( '模块管理' ).click() sleep( 2 ) title = self .drvier.title #获取模块管理界面的title # print(title) if title = = '门户 - Discuz! Board - Powered by Discuz!' : print ( '模块管理中心OK' ) #模块管理中心OK else : print ( 'NO' ) sleep( 4 ) self .drvier.close()<br> if __name__ = = '__main__' : D = Discuz() # D.login() #调用登录模块 D.mk_login() #调用登录模<br><br>二、注册、登录from selenium import webdriver from time import sleep class discuz( object ): def __init__( self ): self .driver = webdriver.Chrome() self .driver.get( 'http://192.168.153.130//bbs/forum.php' ) sleep( 2 ) self .driver.maximize_window() def zhuce( self ): self .driver.find_element_by_link_text( '立即注册' ).click() sleep( 2 ) self .driver.find_element_by_id( 'WxQGOM' ).send_keys( 'hzdcs' ) sleep( 2 ) self .driver.find_element_by_id( 'qMmWJc' ).send_keys( '123456789' ) sleep( 2 ) self .driver.find_element_by_id( 'ax0xA0' ).send_keys( '123456789' ) sleep( 2 ) self .driver.find_element_by_id( 'vQeIRe' ).send_keys( '812462278@qq.com' ) sleep( 2 ) self .driver.find_element_by_id( 'registerformsubmit' ).click() def login( self ): self .driver.find_element_by_id( 'ls_username' ).send_keys( 'admin' ) sleep( 2 ) self .driver.find_element_by_css_selector( 'input[name="password"]' ).send_keys( '123456' ) sleep( 2 ) self .driver.find_element_by_css_selector( '.fastlg_l button[type="submit"]' ).click() sleep( 2 ) # self.browser.find_element_by_xpath('//*[@id="um"]/p[1]/a[7]').click() #退出 # sleep(2) try : yy = self .driver.find_element_by_css_selector( '[title="我的帖子"]' ).get_attribute( 'title' ) print (yy) assert yy = = '我的帖子' except : print ( "登录失败" ) else : print ( "登录成功" ) if __name__ = = '__main__' : p1 = discuz() p1.zhuce() p1.login()<br><br>拓展知识:<br><br><br>三、在论坛成功上发帖<br><br> 3.1 发帖一:我的 - - - - 》发帖 - - - - 》备注: class 属性中间有空格,如果直接复制过来定位是会报错的<br>InvalidSelectorException: Message:<br>原因: #成功发帖 from time import sleep from selenium import webdriver driver = webdriver.Chrome() url = 'http://192.168.153.130/bbs/forum.php' driver.get(url) driver.maximize_window() driver.find_element_by_id( 'ls_username' ).send_keys( 'admin' ) sleep( 3 ) driver.find_element_by_id( 'ls_password' ).send_keys( '123456' ) sleep( 3 ) driver.find_element_by_css_selector( ".pn" ).click() sleep( 3 ) driver.find_element_by_link_text( "默认版块" ).click() driver.find_element_by_xpath( '//*[@id="newspecial"]/img' ).click() sleep( 3 ) driver.find_element_by_id( 'subject' ).send_keys( '论坛自动化测试快速发贴' ) sleep( 3 ) s = driver.find_element_by_xpath( '//*[@id="e_iframe"]' ) driver.switch_to_frame(s) driver.find_element_by_xpath( '/html/body' ).send_keys( '测试成功' ) driver.switch_to_default_content() driver.find_element_by_xpath( '//*[@id="postsubmit"]/span' ).click() #帖子搜索<br>from time import sleep<br>from selenium import webdriver<br>driver = webdriver.Chrome()<br>url='http://192.168.153.130/bbs/forum.php'<br>driver.get(url)<br>driver.maximize_window()<br>driver.find_element_by_id('ls_username').send_keys('admin')<br>sleep(3)<br>driver.find_element_by_id('ls_password').send_keys('123456')<br>sleep(3)<br>driver.find_element_by_css_selector(".pn").click()<br>sleep(3)<br>driver.find_element_by_xpath('//*[@id="scbar_txt"]').send_keys('论坛自动化测试快速发贴')<br>driver.find_element_by_xpath('//*[@id="scbar_btn"]').click()<br><br>作业:1 .自己写五调条论坛的用例 |
结论:
(1)先执行try block, 直到发现了错误,不再执行异常之后的代码。
(2)执行except block.
(3)向下继续。

3.2
3.3默认模块发帖方式
1.class属性中间的空格并不是空字符串,那是间隔符号,
表示的是一个元素有多个class的属性名称
(class属性是比较特殊的一个,除了这个有多个属性外,其它的像name,id是没多个属性的)
2、class属性有空格是多个属性了,定位的时候取其中的一个就行(并且要唯一)
F12

四、论坛帖搜索
2、结合自己项目写自动化用例,并把出现的问题总结及解决的方法
问题总结:
问题1.用户名id变化
问题2:
2、查看共同好友提示框,取消
问题3:
3、回帖中的表情添加
问题4:
图标点击发帖定位
问
问题5:
性别的切换
问题6:猿辅导
首次登陆登陆无法,定位
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架