2016-06-09 4 views
0

Ich habe eine Klasse für Selen verwenden, weil ich es will in zwei Formen arbeiten, und ich habe gesagt, dies zu tun:Selen stürzt ab, wenn auf dem 2. Formular übergibt

public class selenium1 
    { 
     public ChromeDriver driverx; 

     public ChromeDriver create() 
     { 
      driverx = new ChromeDriver(); 
      return driverx; 
     } 
     public ChromeDriver getDriver2() 
     { 
      return driverx; 
     } 
    } 

In meiner ersten Form ich es verwenden so, und es funktioniert gut.

ChromeDriver driver; 
private void Form1_Load(object sender, EventArgs e) 
    { 
     vulcan2.selenium1 asd = new vulcan2.selenium1(); 
     driver = asd.create(); 
    } 

Aber später in der zweiten, wenn ich eine andere Seite mit dem gleichen Treiber laden möchten:

 ChromeDriver driver; 
     private void frmMain_Load(object sender, EventArgs e) 
     { 
      vulcan2.selenium1 asd = new vulcan2.selenium1(); 
      driver = asd.getDriver2(); 
      MessageBox.Show("dsadsadsa"); 
      driver.Navigate().GoToUrl("http://google.com"); 
     } 

Es friert einfach und stürzt meine Anwendung. Wie kann ich es reparieren?

+0

Wie die anderen unten gesagt haben, sollten Sie Ihre Singleton-Implementierung beheben. Aber das erklärt nicht, warum es zusammenbricht. Ich vermute, dass Ihr Treiber nicht an erster Stelle funktioniert, da Form1 keine Operationen wie das Navigieren oder Auswählen von Elementen ausführt, während frmMain_Load eine Navigationsaktion ausführt. Meine Vermutung ist, dass Selenium den Browser startet, aber die Bindungen funktionieren möglicherweise nicht mit dieser Version des Browsers, so dass der Befehl Navigieren fehlschlägt. –

Antwort

0

In jeder Methode instanziieren Sie eine neue Instanz der selen1-Klasse. Jedes selenium1-Objekt hat seinen eigenen Treiber x und erstellt daher für jeden neue Treiber.

Was würde ich empfehlen, driverx zu einem öffentlichen statischen Member zu machen und in Ihrer create-Methode zu überprüfen, ob dieses Objekt null ist, einen ChromeDriver instanziieren und dann das driverx-Member zurückgeben.

Sie könnten auch Ihre Selen1-Klasse zu einer Singleton-Klasse machen, die Ihren Bedürfnissen am ehesten entspricht.

Verwandte Themen