Est-il possible d'utiliser le Sélénium avec C# windows Form qui contient un objet WebBrowser?
Je me demandais si il est possible d'utiliser le Sélénium avec un Windows en C# Forme
que contient un objet WebBrowser.
Je suis en utilisant le sélénium
et je suis capable de créer des cas de test avec le Sélénium enregistrement de script; je suis
juste essayer d'identifier si oui ou non je peux exporter le code C# et
il ont tous exécutés dans un environnement C#. J'apprécie toutes les pensées ou
des explications.
mise à jour
Je suis arrivé au point d'avoir le Sélénium ouvrir le WinForm qui contient le Composant WebBrowser. Cependant, à partir de là mon test ne sera pas exécuté. Dirait qu'il ne comprend pas le sélénium commande. Je ne vois pas tous les messages d'erreur d'être jeté si. hmmm
La chose est winformWithWebBrowserTest
.exe qui s'ouvre winForm avec webbrowser est ouvert.
Mais rien ne se passe. Code ci-dessous est celui qui tire le .exe
le code de test (Sélénium commande)
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");
}
}
}
.exe
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();
}
}
}
}
Mise à JOUR
J'ai fait mon test simple alors maintenant, je n'utilise pas NUnit. J'ai créé console C# app juste pour faire tourner le c# .exe fichier. Mais dans ma console il serait sortie de "--1--"
et "--2--"
seulement..
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();
}
}
}
Mise à JOUR
J'ai vérifié RC journal:
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
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas fait cela avec du sélénium, mais j'ai fait la même chose avec WatiN quand j'ai voulu automatiser InfoPath. L'approche que j'ai pris était comme suit:
Tuer tous les processus qui ont ce nom dans mon cas c'était "infopath"
Lancer votre application de test de Processus d'appel.GetProcessesByName pour obtenir tous les id de processus est ensuite de récupérer le handle de fenêtre de la première, comme il ne devrait être qu'un processus en cours d'exécution.
Maintenant que j'avais la poignée de la fenêtre, j'ai l'IHTMLDocument2 pour automatiser contre avec WatiN.
Le réel en caoutchouc sur la route de l'IEDom la classe ... le code est ci-dessous ...
Désolé, ce n'est pas pour le sélénium, mais il est de savoir comment j'ai résolu le problème pour WatiN donc j'espère que ça peut aider. Le code est ici http://itin.codeplex.com/, et je pense aussi que cela a été ajouté à WatiN ainsi.
En théorie, il serait de travailler aussi longtemps que le Sélénium peut injecter JS dans le navigateur de composants. Vous devez utiliser la *commande personnalisée et passe dans le fichier exécutable que vous voulez de Sélénium pour commencer et ensuite il vont essayer de faire ce que vous voulez.
Je pense que vous pouvez, mais vous pourriez avoir à utiliser Selenium RC. Il a une .Net version du Sélénium API.
Nous avons piraté le selenium webdriver code légèrement pour s'attacher à une embarqués IE exemple à l'intérieur d'une application windows. http://bradbax.blogspot.ca/2013/07/driving-embedded-wpf-browser-with.html