51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2021|回复: 1

[转贴] Python和Selenium 自动化运行《人生重开模拟器》

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:12
  • 签到天数: 918 天

    连续签到: 3 天

    [LV.10]测试总司令

    发表于 2021-9-24 09:28:48 | 显示全部楼层 |阅读模式
    背景
      最近有一款小游戏特别火,叫《人生重开模拟器》,这款游戏用黑色幽默的调侃形式,随机生成你的人生大事件列表,开场还能抽取天赋加点,趣味性十足。
      因为官网访问流量过大,有的朋友出现访问白屏、网页失效的情况,小编在这里发一个最新的人生重开模拟器在线链接:
      dushusir.com/life/
      不停地重开自己的人生之后,小编想着能不能写个脚本来自动化运行这款游戏,因为是纯网页操作,所以可以使用Python和Selenium组合的自动化测试神器来测试下。
      思路
      因为本质上这个游戏是一系列的网页操作,所以实现起来比较简单,就当是复习下Selenium的基本元素操作。想入门Python的童鞋可以看下,以前小编写过一个 Python+Selenium自动化测试合成大西瓜一样可以作为学习。
      注意:这不是一个智能的提高游戏分数的脚本,只是一个演示自动化测试学习案例,帮助大家更好的理解selenium的用法。
      开发环境
      1.下载Python并安装
      2.安装pip
      3.安装Selenium和浏览器webdriver
      mac平台和windows平台有所不同,安装时注意下环境。细节问题这里就不列出了,大家多用户谷歌。
      代码
      环境准备好之后,直接复制以下代码到.py文件里,比如main.py,执行。
    1. python main.py即可启动webdriver运行自动化人生重开模拟器。
    2.   #!/usr/bin/python
    3.   # -*- coding: UTF-8 -*-
    4.   # 谷歌浏览器驱动
    5.   from selenium import webdriver
    6.   # sleep模块,让程序停止往下运行
    7.   from time import sleep
    8.   # 导入 random(随机数) 模块
    9.   import random
    10.   # 手机模式加载谷歌浏览器
    11.   mobile_emulation = {'deviceName': 'iPhone 5'}
    12.   options = webdriver.ChromeOptions()
    13.   options.add_experimental_option("mobileEmulation", mobile_emulation)
    14.   driver = webdriver.Chrome(chrome_options=options)
    15.   # 设置浏览器大小
    16.   driver.set_window_rect(0,0,700,700)
    17.   sleep(1)
    18.   # 打开设定的网址
    19.   driver.get('https://dushusir.com/life')
    20.   # 隐式等待
    21.   driver.implicitly_wait(5)
    22.   # 点击 立即重开
    23.   restart = driver.find_element_by_id('restart')
    24.   restart.click()
    25.   sleep(1)
    26.   # 点击 10连抽
    27.   driver.find_element_by_id('random').click()
    28.   sleep(1)
    29.   # 随机1-10数字,用于抽中天赋卡
    30.   randomOne = random.randint(1,3)
    31.   randomTwo = random.randint(4,6)
    32.   randomThree = random.randint(7,10)
    33.   # 找到三张天赋卡按钮并点击
    34.   driver.find_element_by_css_selector("#talents li:nth-of-type("+ str(randomOne) +")").click()
    35.   driver.find_element_by_css_selector("#talents li:nth-of-type("+ str(randomTwo) +")").click()
    36.   driver.find_element_by_css_selector("#talents li:nth-of-type("+ str(randomThree) +")").click()
    37.   # 点击确认:“请选择3个”
    38.   driver.find_element_by_css_selector("#next").click()
    39.   sleep(1)
    40.   # 点击随机分配
    41.   driver.find_element_by_css_selector("#random").click()
    42.   sleep(2)
    43.   # 开始新人生
    44.   driver.find_element_by_css_selector("#start").click()
    45.   # 持续点击人生大事件列表区域,直到列表区域内容不再增加,即表明人生结束
    46.   isOver = False # 结束标识
    47.   life = 0 # 前一个life长度
    48.   while(not isOver):
    49.      
    50.       # 点击列出人生大事件
    51.       driver.find_element_by_css_selector("#lifeTrajectory").click()
    52.       print('点击一次'+str(life))
    53.       sleep(1)
    54.       # 注意必须使用find_elements,不是find_element,否则len方法会报错
    55.       li = driver.find_elements_by_css_selector("#lifeTrajectory li")
    56.       currt_life = len(li)
    57.       # 如果列表在继续增加,则继续点击;一旦不再增加,表明你挂了
    58.       if currt_life > life:
    59.           life = currt_life
    60.       else:
    61.           isOver = True
    62.           print('结束')
    63.   # 点击人生总结
    64.   driver.find_element_by_id('summary').click()
    65.   sleep(5)
    66.   driver.quit()
    复制代码

     总结
      程序写的比较粗略,很多细节还没有完善,不过可以作为小案例参考,也欢迎大家批评指出问题。后续有时间再分享更多有用的测试脚本和好玩的游戏。

    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-3-28 19:21 , Processed in 0.064207 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表