我想知道是否可以将Selenium与包含WebBrowser对象的C# Windows窗体一起使用。
我正在使用Selenium,并且能够使用Selenium脚本记录创建测试用例;我只是想确定我是否可以导出C#代码,并让它在C#环境中运行。我感谢任何想法或解释。
update我已经到了让Selenium打开包含WebBrowser组件的WinForm的地步。但是,从那里我的测试无法执行。看起来它不理解selenium命令。但是,我没有看到任何错误消息被抛出。hmmm
这个问题是winformWithWebBrowserTest
.exe,它打开了带有webbrowser的winForm。但是什么都没有发生。下面的代码是启动.exe的代码
测试代码(Selenium命令)
namespace ClassLibrary1
{
class Class2
{
private ISelenium selenium;
private StringBuilder verificationErrors;
[SetUp]
public void SetupTest()
{
selenium = new DefaultSelenium
("localhost", 4444, "*custom C:\\Users\\m-tak\\Documents\\Visual Studio 2010\\Projects\\winformWithWebBrowserTest\\winformWithWebBrowserTest\\bin\\Release\\winformWithWebBrowserTest.exe", "http://www.livemocha.com");
selenium.Start();
verificationErrors = new StringBuilder();
}
[TearDown]
public void TeardownTest()
{
selenium.Stop();
}
[Test]
public void TheUntitledTest()
{
//nothing here gets executed :(
Console.WriteLine("foobar front");
selenium.Open("/");
Console.WriteLine("foobar");
selenium.WaitForPageToLoad("30000");
selenium.Open("/users/logout");
selenium.Open("/users/login");
}
}
}
.可执行文件
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
//this gets executed always......
HtmlElement head = webBrowser1.Document.GetElementsByTagName("body")[0];
HtmlElement scriptOne = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptOne.DomElement;
element.text = "function sayHello() { " +
"alert('hello');" +
" }" ;
head.AppendChild(scriptOne);
webBrowser1.Document.InvokeScript("sayHello");
}
//getter setter.....
public WebBrowser getWebBrowser()
{
return this.webBrowser1;
}
public void setWebBrowser(WebBrowser wb)
{
this.webBrowser1 = wb;
}
//just address bar
private void button1_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(textBox1.Text))
{
webBrowser1.Navigate(textBox1.Text);
}
}
//just address bar
private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
if (textBox1.Text != e.Url.ToString())
{
textBox1.Text = e.Url.ToString();
}
}
}
}
更新
我使我的测试变得简单,所以现在我不使用NUnit。我创建了C#控制台应用程序,只是为了运行c# .exe文件。但在我的控制台中,它将输出"--1--"
和“--2--"
only..”
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using Selenium;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("-- 1---");
ISelenium selenium;
selenium = new DefaultSelenium
("localhost", 4444, "*custom C:\\Users\\m-takayashiki\\Documents\\Visual Studio 2010\\Projects\\winformWithWebBrowserTest\\winformWithWebBrowserTest\\bin\\Release\\winformWithWebBrowserTest.exe", "http://www.livemocha.com");
Console.WriteLine("-- 2---");
selenium.Start();
Console.WriteLine("-- 3---");
selenium.Open("/");
selenium.WaitForPageToLoad("30000");
selenium.Open("/users/logout");
selenium.Open("/users/login");
Console.WriteLine("test test test");
//tear down
selenium.Stop();
}
}
}
更新
我检查了RC日志:
15:40:35.379 DEBUG [13] org.openqa.jetty.http.HttpContext - Handler org.openqa.selenium.server.SeleniumDriverResourceHandler in HttpContext[/selenium-server,/selenium-server]
15:40:35.380 DEBUG [13] org.openqa.selenium.server.SeleniumDriverResourceHandler - req: POST /selenium-server/driver/ HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: localhost:4444
Content-Length: 247
Expect: 100-continue
Connection: keep-alive
15:40:45.408 DEBUG [13] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1790 more secs
15:40:45.408 DEBUG [13] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms
15:40:45.945 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - got condition? : false
5条答案
按热度按时间vjrehmav1#
我还没有对Selenium进行过这样的操作,但是当我想自动化InfoPath时,我对WatiN进行了同样的操作。我采用的方法如下:
1.关闭所有具有该名称的进程在我的例子中是“infopath”
1.启动测试应用程序,调用Process.GetProcessesByName获取所有进程的id,然后获取第一个进程的窗口句柄,因为应该只有一个进程在运行。
1.现在我有了窗口句柄,我得到了IHTMLDocument2,以便使用WatiN自动化。
真实的的橡胶击中道路在IEDom类...代码如下..
对不起,这不是 selenium ,但这是我如何解决问题的WatiN,所以我希望它可以帮助。代码在这里http://itin.codeplex.com/,我也认为这已被添加到WatiN以及。
knsnq2tg2#
从理论上讲,只要Selenium能够将JS注入浏览器组件,它就可以工作。您需要使用 *custom命令并传入您希望Selenium启动的可执行文件,然后它将尝试执行您想要的操作。
ekqde3dh3#
我想你可以,但是你可能必须使用Selenium RC。它有一个.Net版本的Selenium API。
mhd8tkvw4#
我们稍微破解了selenium webdriver代码,将其附加到Windows应用程序中的嵌入式IE示例。http://bradbax.blogspot.ca/2013/07/driving-embedded-wpf-browser-with.html
pxy2qtax5#
目前我还没有测试它,但它应该可以通过一个远程调试浏览器示例实现,如下所述:https://stackoverflow.com/a/70069612/13163366