自动化中尽可能减少用例之间的关联,能使用url的地方最好使用url;所以对于许多的新增、修改和其他操作我们尽可能的使用一个相对固定的url访问打开此页面进行元素的定位和输入,如图所示
此页面账号管理页面中,对于新增或修改操作,我们需要先打开账号管理这个页面,然后再次点击新增或修改按钮打开新增或修改页面;但是如果系统中账号管理的树形结构更换或新增、修改按钮的位置变换那么我们就需要重新定位变换的元素的位置。实际上我们可以不用这么麻烦,我们首先找到账号管理的页面url,查看该页面是否是固定的url,在图中显示的/guardian/query我们把浏览器的地址192.168.1.6拼接起来,打开了账号管理主页面的地址,如图
问题2:
robotframework运行测试用例时提示gckodriver相关信息,如图所示
提示代码如下
Starting test: Open.Suit.open 20170802 08:42:08.000 : INFO : Opening browser 'FireFox' to base url 'http://www.baidu.com' 20170802 08:42:08.015 : FAIL : No browser is open 20170802 08:42:08.016 : WARN : Keyword 'Capture Page Screenshot' could not be run on failure: No browser is open 20170802 08:42:08.017 : FAIL : WebDriverException: Message: 'geckodriver' executable needs to be in PATH. Ending test: Open.Suit.open提示说明需要在路径path中添加geckodriver,当然解决办法就是,下载一个geckodriver.exe并将存放的路径添加在path中,简单点就直接放python的根目录下即可,下载地址 https://github.com/mozilla/geckodriver/releases,另外需要注意下,geckodriver分32及64位的版本,版本需与浏览器对应。
问题3:
问题背景:利用robotframework在写自动化脚本的时候, 有些场景下需要新建一个浏览器窗口,但是又需要共享原窗口的session,这时候只需要在浏览中新打开一个tab页就可以。比如以上面的新增账号为例,我打开登录页面,登录成功之后,需要再次打开新增账号页面,而新增账号页面和登录成功的页面是共用session的,这个如何实现的呢?脚本如下:
Execute JavaScript window.open('addGuardian');或者可以使用robotframework中的关键字goto实现,代码如图
goto ${AccountAllotModify}goto的用法可以在robotframework中查看该关键字如何使用,如图
问题4:
robotframework运行用例时,只第一次运行用例的时候有日志显示,之后不会显示该日志信息,日志信息显示如图
解决方法:这里使用的是火狐浏览器,每次第一次运行测试用例的时候电脑中会启动一个进行geckodriver.exe,所以在每次运行完用例后,在最后的teardown中增加一个关闭进程的操作即可,代码如图 close Close Browser Comment ${Runoutput} OperatingSystem.Run taskkill /f /im geckodriver.exe OperatingSystem.Run taskkill /f /im geckodriver.exe
这样修改之后,每次运行都可以看到日志信息了。
问题5:
随机选择下拉框选项:
背景:如账号添加的时候我们需要选择账号所属机构,如果想选择每次添加的账号是随机的,那么该如何操作呢?可以看一下之前的robotframework随机选择下拉框
问题6:
新增或修改用例中用户名、姓名、身份证号、手机号等这些字段中,有唯一性验证,所以为了测试的严谨性,我们需要每次添加或修改的信息是唯一的,该如何实现呢?
解决方法:这里使用了QTLibrary的一个关键字,安装和使用参考 https://github.com/qitaos/Robotframework-QTLibrary
这样安装完成之后,直接加入Library即可使用该关键字信息
随机姓名代码如下
其他随机英文或数字或身份证以及生日使用请参考QTLibrary的使用关键字。
而这里的随机手机号使用的是robotframework中强大的关键字Evaluate来实现操作的,代码如下
${phone} Evaluate random.choice(['139','188','185','136','158','151'])+"".join(random.choice("0123456789") for i in range(8)) random 手机号码 ${phone}robotframework中如图所示
问题7: