2013-08-27 9 views
6

Uso il selenio su macchine diverse per automatizzare il test di un'applicazione MVC Web.Selenio: trova l'Url di base

Il mio problema è che non riesco a ottenere l'url di base per ogni macchina.

posso ottenere l'URL corrente utilizzando il seguente codice:

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

Ma questo non aiuta quando ho bisogno di passare a una pagina diversa.

Idealmente ho potuto solo utilizzare il seguente per navigare le pagine differenti:

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

Una possibile soluzione che stavo usando è:

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

Esiste un modo migliore che potessi fare questo ??

+0

Giusto per essere sicuro di seguirlo. Esempio: Dato 'http: // www.google.com/something' ... e vuoi * specificamente * solo la parte' http: // www.google.com'? – Arran

+0

Quando eseguo l'applicazione andrà a un url come http: // localhost: 12345/Login (questo sarà diverso a seconda della macchina), quindi voglio che il driver vada alla pagina come http: // localhost : 12345/feedback. Quindi voglio solo http: // localhost: 12345/part poiché non riesco a codificare un collegamento nel mio codice poiché sarà diverso su ogni macchina. – user2184530

risposta

13

Il modo migliore è creare un'istanza Uri dell'URL.

Questo perché il class in .NET ha già il codice in atto per farlo esattamente per voi, quindi dovreste semplicemente usarlo. Mi piacerebbe andare per qualcosa di simile (codice non testato):

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"); 

In sostanza, si sta dopo il Authority property all'interno della classe Uri.

Nota, c'è una proprietà che fa una cosa simile, chiamata Host ma questo non include i numeri di porta, che il tuo sito fa. È qualcosa da tenere a mente però.

+0

Grazie, funziona perfettamente. – user2184530

0

Prova questa espressione regolare presa da questo 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

Prendere la driver.Url, gettarlo in un nuovo System.Uri, e utilizzare myUri.GetLeftPart(System.UriPartial.Authority).

Se l'URL di base è http://localhost:12345/Login, ciò restituirà http://localhost:12345.

Problemi correlati