gpt4 book ai didi

c# - 使用 ScriptEngine (.NET 3.5) 在 C# 中执行 Selenium python 单元测试时遇到问题

转载 作者:行者123 更新时间:2023-11-30 12:37:10 25 4
gpt4 key购买 nike

第一次海报。

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

Selenium 以下列形式在 python 中输出单元测试:

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__", "__main__")。当我注释掉 py 文件的 if __name__ 部分并在调用 engine.Runtime.ExecuteFile() 之后调用 engine.CreateScriptSourceFromString("unittest.main(module=None") 时,我确实取得了一些成功在 py 文件上。我尝试将结果存储在 python 中并通过 scope.GetVariable() 访问它们。我还尝试编写一个可以从 C# 调用的 python 函数来执行单元测试。

(engine 是 ScriptEngine 的实例,source 是 ScriptSource 的实例,等等)

我对 Python、ScriptEngine 或 unittest 模块的无知很容易成为我遇到麻烦的原因。有没有人有幸在 C# 中使用 ScriptEngine 等 API 执行 python 单元测试?有没有人从 ScriptEngine 成功执行过“主要”代码?

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

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

提前致谢。我认为拥有更多细节总比拥有更少细节要好。 =P

最佳答案

查看 source code在 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()

运行它会打印出“this is ma​​in”。

关于c# - 使用 ScriptEngine (.NET 3.5) 在 C# 中执行 Selenium python 单元测试时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com