2017-09-20 2 views
0

Ich versuche, eine einfache Automatisierungsaufgabe zu erstellen. Fürs Erste möchte ich mich auf der Webseite einloggen. Dies alles funktioniert gut, wenn ich den Test in Visual Studio 2017 ausführen. Dies muss jedoch als eine Exe auf regelmäßigen Intervall in Windows-System ausgeführt werden. Wenn ich die ausführbare Datei ausgeführt hängt es nach der Anzeige:Selenium/Chromedriver Automatisierung hängen, wenn als ausführbare Datei ausgeführt

Ab ChromeDriver 2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a)

auf Port 9515

Nur lokale Verbindungen erlaubt.

Ich verstehe das einfach info ist kein Fehler pro meist SO Beiträge zu diesem Problem wie - When running WebDriver with Chrome browser, getting message, "Only local connections are allowed" even though browser launches properly (Anmerkung: mein Browser nicht gestartet)

Wie kann ich den Test-Code ausführen, wie eine ausführbare Datei? Muss ich zusätzlichen Code schreiben, um den Test als ausführbare Datei auszuführen?

Nuget Version Info

namespace RevuSeleniumAutomation 
{ 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Firefox; 
using OpenQA.Selenium.IE; 
using OpenQA.Selenium.Remote; 
using OpenQA.Selenium.PhantomJS; 
using System; 

[TestClass] 
public class RevuAutomater 
{ 
    private string baseURL = "http://example.com/"; 
    private RemoteWebDriver driver; 
    private string browser; 
    public TestContext TestContext { get; set; } 

    [TestMethod] 
    [TestCategory("Selenium")] 
    [Priority(1)] 
    [Owner("Chrome")] 

    public void AutomateSite() 
    { 
     driver = new ChromeDriver(); 
     driver.Manage().Window.Maximize(); 
     driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30)); 
     driver.Navigate().GoToUrl(this.baseURL); 
     driver.FindElementById("UserName").SendKeys("user"); 
     driver.FindElementById("Password").SendKeys("12345"); 
    } 

    [TestCleanup()] 
    public void MyTestCleanup() 
    { 
     driver.Quit(); 
    } 

    [TestInitialize()] 
    public void MyTestInitialize() 
    { 
    } 
} 

}

The cmd window message after launching exe

Vielen Dank für Ihre Zeit.

+0

Haben Sie in Visual Studio und als EXE auf demselben Computer ausgeführt? Wenn dies der Fall ist, sollte es als in Visual Studio ausgeführt übergeben werden, da beide den gleichen Chrome und Chromeedriver.exe verwenden. – yong

+0

das Problem ist Chrome-Treiber hängt & Sie müssen alle Chromedriver-Prozess vor dem erneuten Aufruf der exe beenden. Beispiel cmd Befehl kann als erster Teil Ihres Codes verwendet werden: "taskkill/F/IM chromedriver.exe/T", die auf cmd ausgeführt werden muss – thebadguy

Antwort

1

als EXE auszuführen Ich denke, es gibt zwei Möglichkeiten:

1) nicht mit Selen-Server oder Gitter
. Sie müssen die chromedriver.exe mit Ihrem Code in die EXE
packen. Sie müssen den Pfad von chromedriver.exe zur Laufzeit berechnen, da Sie nicht wissen, dass der Benutzer die EXE in den Ordner
setzen wird. angeben, indem ChromeOptions chromedriver.exe Selen zu sagen, wo es zu finden, wenn Treiberinstanz

Shortage dieser Art und Weise schaffen: eine chromedriver.exe von certian Version Unterstützung begrenzt Chrom verions nicht alle Chrom verions, müssen Sie sagen, Benutzer, die Chrome die EXE-Unterstützung.

2) Selenserver/Gitter
verwenden. Sie müssen Selen Server/Grid-Adresse aus einer Konfigurationsdatei akzeptieren, die der Benutzer ändern kann
. Erstellen Sie eine RemoteWebDriver-Instanz mit der obigen Adresse, nicht ChromeDriver im Code
. keine Notwendigkeit zu verpacken chromedriver.exe mit Ihrem Code

Shortage dieser Art und Weise: Ein Selen-Server/grid vor EXE auszuführen bereit sein muss, Aber Ihren Code keine Notwendigkeit, die Kompatibilität von Chrom und chromedriver.exe zu berücksichtigen , weil sie beim Setup Selen Server/Grid berücksichtigt wurden.

+0

Für Option 1 können Sie Konfigurationsdatei als Option 2 verwenden, um den Pfad von chromedriver.exe vom Benutzer selbst. – yong

Verwandte Themen