使用ScriptEngine(.NET 3.5)在C#中执行Selenium pythonunit testing时遇到问题

第一次海报。

我转向关于堆栈溢出的第一个问题,因为我找到了很少的资源来寻找答案。 我正在寻找从C#应用程序执行Selenium python测试。 我不想每次都要编译C#Selenium测试; 我想利用IronPython脚本进行动态selenium测试。 (注意:我没有Python或ScriptEngine等经验。)

Selenium以下列forms在python中输出unit testing:

from selenium import selenium import unittest class TestBlah(unittest.TestCase): def setUp(self): self.selenium = selenium(...) self.selenium.start() def test_blah(self): sel = self.selenium sel.open("http://www.google.com/webhp") sel.type("q", "hello world") sel.click("btnG") sel.wait_for_page_to_load(5000) self.assertEqual("hello world - Google Search", sel.get_title()) print "done" def tearDown(self): self.selenium.stop() if __name__ == "__main__": unittest.main() 

我可以使用ipy.exe从命令行运行,没问题:

 ipy test_google.py 

我可以看到Selenium Server启动一个firefox浏览器实例并运行测试。

我无法使用C#,.NET 3.5中的ScriptEngine等API获得相同的结果,我认为它的核心是无法执行main()函数我猜测以下代码是:

 if __name__ == "__main__": unittest.main() 

我已经尝试了engine.ExecuteFile(),engine.CreateScriptSourceFromString()/ source.Execute()和engine.CreateScriptSourceFromFile()/ source.Execute()。 我尝试了scope.SetVariable(“ __name__ ”,“ __name__ ”)。 当我注释py文件的if __name__部分并在py文件上调用engine.Runtime.ExecuteFile()之后调用engine.CreateScriptSourceFromString(“unittest.main(module = None”)时,我确实取得了一些成功。尝试将结果存储在python中并通过scope.GetVariable()访问它们。我也尝试编写一个python函数,我可以从C#调用它来执行unit testing。

(引擎是ScriptEngine的一个实例,源代码是ScriptSource的一个实例,等等)

我对Python,ScriptEngine或unittest模块的无知很容易成为我的麻烦。 有没有人有幸在C#中使用ScriptEngine等API执行pythonunit testing? 有没有人成功地从ScriptEngine执行“主要”代码?

另外,我已经读过unittest有一个测试运行器,它将通过TestResult对象帮助访问错误。 我相信语法如下。 我还没到这里,但知道我需要收获结果。

 unittest.TextTestRunner(verbosity=2).run(unittest.main()) 

提前致谢。 我认为有更多细节而不是更少的细节会更好。 = P

查看IronPython控制台(ipy.exe)的源代码 ,看起来它最终归结为调用ScriptSource.ExecuteProgram() 。 您可以从任何各种ScriptEngine.CreateScriptSourceFrom*方法获取ScriptSource

例如:

 import clr clr.AddReference("IronPython") from IronPython.Hosting import Python engine = Python.CreateEngine() src = engine.CreateScriptSourceFromString(""" if __name__ == "__main__": print "this is __main__" """) src.ExecuteProgram() 

运行此将打印“这是主要 ”。

请尝试以下方法:

 unittest.main(module=__name__)