检查Web框架中的Web驱动程序是否已启动

时间:2015-08-02 08:00:24

标签: python selenium selenium-webdriver robotframework

我在Robot Framework中编写了一些测试用例,我的项目结构是这样的:

@IBOutlet weak var currentimage: UIImageView!
var currentfile : Files?

override func viewDidLoad() 
{
    super.viewDidLoad()
    currentimage.image = UIImage(named: currentfile!.filename)
}

我有TestProject |__ TestScenarios |__ TestCategory1 |__ TestCategory2 |__ __init__.py |__ RunTest.py 打开浏览器,其中包含指定的网址和suit setup,可关闭suit teardown中的所有浏览器。我打电话给__init__.py以运行我的测试用例;我在RunTest.py中设置了测试中应包含或排除的目录以及其他一些首选项。

如果我从顶级目录设置测试目录,即RunTest.py,则会调用TestScenarios。但是当我为运行设置子目录时,__init__.py逻辑上不会被调用,因此没有浏览器。如果我将另一个__init__.py文件添加到子目录中,如果我从顶层目录运行测试会有问题;会有多个浏览器。

我想要的是在每个子目录中添加一个__init__.py文件,但在这些新的__init__.py文件中,我将检查浏览器是否打开,如果是,我将继续使用当前的一个,否则我将打开一个新的浏览器。所以。我可以轻松地在目录之间切换。

任何帮助我怎么能做我在上一段中谈到的内容?

2 个答案:

答案 0 :(得分:1)

一种解决方案是运行您知道如果没有打开浏览器就会失败的关键字。如果关键字失败,请打开浏览器。如果成功,什么都不做。

它可能看起来像这样:

*** Keywords ***
| Maybe open browser
| | # Don't capture screenshot if this fails
| | ${fail keyword}= | Register keyword to run on failure | Nothing
| | 
| | # Run a keyword and capture the status
| | ${status}= | run keyword and return status | Get Window Identifiers
| | 
| | # Reset the run-on-failure keyword
| | Register keyword to run on failure | ${fail keyword}
| | 
| | # Return if the keyword succeeds, on the assumption
| | # that a browser window is already open
| | Run keyword unless | ${status} == False | Return from keyword 
| | 
| | # No browser was open, so open one
| | log | No browser was previously open
| | Open browser | http://www.google.com | chrome

在我看来,最好的解决方案是始终从根文件夹运行测试,并使用命令行参数和标记来运行特定的套件。

答案 1 :(得分:0)

您可以使用subprocess模块查看实时流程并检查您的浏览器是否已打开:

import subprocess

def __init__(proc_name,flag=False):
   p = subprocess.Popen(['ps','-A'], stdout=subprocess.PIPE)
   out, err = p.communicate()
   for line in out.splitlines():
      if proc_name in line:
          print line
          flag=True
          # continue with current proc
          #pid = int(line.split(None, 1)[0]) if you need pid 
   if not flag:
          #start new proc 

如果你想杀死一个过程,你可以起诉os,kill如下:

os.kill(pid, subprocess.signal.SIGKILL)