【发布时间】:2012-08-19 13:10:08
【问题描述】:
我已经搜索了很多,但我没有得到答案...是否可以将(附加或其他)sikuli(使用 dll 或其他东西,一些代码)包含到编写的 selenium webdriver 测试中c# in Visual Studio 2010
【问题讨论】:
标签: c# selenium webdriver automated-tests sikuli
我已经搜索了很多,但我没有得到答案...是否可以将(附加或其他)sikuli(使用 dll 或其他东西,一些代码)包含到编写的 selenium webdriver 测试中c# in Visual Studio 2010
【问题讨论】:
标签: c# selenium webdriver automated-tests sikuli
我是这样使用的:
internal bool FillSingleRow()
{
return RunTest("Stryktipset_singleRow.sikuli");
}
public static bool RunTest(string sikuliTest)
{
var sikuliHome = Environment.GetEnvironmentVariable("SIKULI_HOME");
var execDir = new DirectoryInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
for (var i = 0; i < 2; i++)
{
var tempDir = execDir.Parent;
if (tempDir != null)
{
execDir = tempDir;
}
}
Sikuli.StartInfo.UseShellExecute = false;
Sikuli.StartInfo.RedirectStandardError = true;
Sikuli.StartInfo.RedirectStandardInput = true;
Sikuli.StartInfo.RedirectStandardOutput = true;
Sikuli.StartInfo.WorkingDirectory = sikuliHome;
Sikuli.StartInfo.CreateNoWindow = true;
Sikuli.StartInfo.Arguments = "-jar sikuli-script.jar -s " + '\u0022' + execDir.FullName + "\\Sikuli\\" + sikuliTest + '\u0022';
Sikuli.StartInfo.FileName = "java.exe";
Sikuli.Start();
var so = Sikuli.StandardOutput;
var se = Sikuli.StandardError;
var error = se.ReadToEnd();
if (error != string.Empty)
{
TestLog.Write(error);
return false;
}
else
{
return true;
}
}
【讨论】:
您是否尝试过使用Sikuli from command line?
我不知道 Selenium 是否内置了对运行外部工具的支持,但在 C# 中使用 Process 对象来启动另一个程序并等待其结束非常容易。
int exitCode;
var processInfo = new ProcessStartInfo(@"c:\pathto\sikuli.exe", "-parameters for command line");
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
Process process = Process.Start(processInfo);
process.WaitForExit();
exitCode = process.ExitCode;
process.Close();
【讨论】:
刚刚完成了一个通过 Web 服务公开 Sikuli 核心功能的 Java 应用程序。然后,通过编写一个调用这个 java 应用程序的“客户端”库,我能够从几乎完全集成的 C# 测试中成功调用 Sikuli。
https://sourceforge.net/projects/sikuli4net/
比通过命令行运行要快很多(这是我以前的解决方案,通常它会额外增加 30 秒的测试时间),并且客户端库会自动解析来自工具的响应,所以你不需要需要对结果进行任何字符串操作!
希望它有所帮助 - 我知道它不是锡库里的确切港口,但希望它能满足您的需求,
【讨论】:
所以...这是我想出的第一种方法。
使用蓝鸭 SDA: http://sda.blueducktesting.com/index.php
这样您就可以从 Selenium 执行任何您想要的操作(通过 AutoIT)。
接下来,您将需要 Sikuli 的通过/失败输出。使用这个包装器: http://code.google.com/p/simplesikuli/wiki/UsageDetails
您可能需要也可能不需要查看/使用 simplesikuli 包装器使用的完整机器人框架。 http://code.google.com/p/robotframework/
祝你好运。
【讨论】:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NUnit.Framework;
using Sikuli4Net.sikuli_REST;
using Sikuli4Net.sikuli_JSON;
using Sikuli4Net.sikuli_UTIL;
using System.Threading;
using Newtonsoft.Json;
namespace UnitTestProject3
{
[TestClass]
public class UnitTest1
{
APILauncher launcher = new APILauncher();
Pattern element1 = new Pattern(@"C:\myfolderforscreens\1.png");
[Test]
public void TestMethod1()
{
launcher.Start();
Thread.Sleep(8000);
Screen test = new Screen();
test.DoubleClick(element1);
}
}
}
试试这个,应该可以的。 p.s.您需要安装 Json - 版本“6.0.5”,设置 Java_Home 和 Sikuli_Home
【讨论】: