2013-08-27 13 views
6

Ich verwende Selenium auf verschiedenen Maschinen, um das Testen einer MVC-Webanwendung zu automatisieren.Selen: Finden Sie die Basis Url

Mein Problem ist, dass ich die Basis-URL für jede Maschine nicht erhalten kann.

Ich kann die aktuelle URL mit dem folgenden Code erhalten:

IWebDriver driver = new FirefoxDriver(); 
string currentUrl = driver.Url; 

Aber das hilft nicht, wenn ich auf eine andere Seite navigieren müssen.

Im Idealfall könnte ich nur folgende zu verschiedenen Seiten navigieren:

driver.Navigate().GoToUrl(baseUrl+ "/Feedback"); 
driver.Navigate().GoToUrl(baseUrl+ "/Home"); 

Eine mögliche Abhilfe, die ich wurde mit ist:

string baseUrl = currentUrl.Remove(22); //remove everything from the current url but the base url 
driver.Navigate().GoToUrl(baseUrl+ "/Feedback"); 

Gibt es eine bessere Art, wie ich dies tun könnte ??

+0

Nur um sicher zu gehen, dass ich dem folge. Beispiel: Gegeben 'http: // www.google.com/something' ... und Sie wollen * spezifisch * nur den 'http: // www.google.com' Teil? – Arran

+0

Wenn ich die Anwendung ausgeführt wird, wird es zu einer URL wie http: // localhost: 12345/Login gehen (dies wird je nach Maschine unterschiedlich sein), ich möchte dann den Treiber auf Seite wie http: // localhost gehen : 12345/Rückmeldung. Daher möchte ich nur das http: // localhost: 12345/part, da ich in meinem Code keinen Link zu diesem Code fest codieren kann, da es auf jedem Rechner anders ist. – user2184530

Antwort

13

Der beste Weg wäre eine Uri Instanz der URL zu erstellen.

Dies ist, weil die Uriclass in .NET bereits Code an Ort und Stelle, um dies genau für Sie tun, so dass Sie nur das verwenden sollten. Ich würde gehen für so etwas wie (ungetestet Code):

string url = driver.Url; // get the current URL (full) 
Uri currentUri = new Uri(url); // create a Uri instance of it 
string baseUrl = currentUri.Authority; // just get the "base" bit of the URL 
driver.Navigate().GoToUrl(baseUrl + "/Feedback"); 

Im Wesentlichen sind Sie nach dem Authority property innerhalb der Uri Klasse.

Hinweis, es gibt eine Eigenschaft, die eine ähnliche Sache tut, Host genannt, aber das schließt Portnummern nicht ein, die Ihre Site tut. Es ist jedoch etwas zu beachten.

+0

Danke, funktioniert perfekt. – user2184530

0

Probieren Sie diesen regulären Ausdruck aus dieser answer.

String baseUrl; 
Pattern p = Pattern.compile("^(([a-zA-Z]+://)?[a-zA-Z0-9.-]+\\.[a-zA-Z]+(:\d+)?/"); 
Matcher m = p.matcher(str); 
if (m.matches()) 
    baseUrl = m.group(1); 
2

Nehmen Sie die driver.Url, in eine neue System.Uri werfen, und myUri.GetLeftPart(System.UriPartial.Authority) verwenden.

Wenn Ihre Basis-URL http://localhost:12345/Login lautet, erhalten Sie http://localhost:12345.