2013-08-27 32 views
6

Tôi đang sử dụng Selenium trên các máy khác nhau để tự động kiểm tra ứng dụng Web MVC.Selenium: Tìm Url cơ sở

Vấn đề của tôi là tôi không thể lấy url cơ sở cho mỗi máy.

Tôi có thể lấy url hiện tại bằng cách sử dụng đoạn mã sau:

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

Nhưng điều này không giúp đỡ khi tôi cần phải điều hướng đến một trang khác.

Lý tưởng nhất là tôi chỉ có thể sử dụng những điều sau đây để điều hướng đến các trang khác nhau:

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

Sự chỉnh sửa có tôi đang sử dụng là:

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

Có cách nào tốt hơn tôi có thể làm điều này ??

+0

Chỉ để đảm bảo tôi tuân theo điều này. Ví dụ: Với 'http: // www.google.com/something' ... và bạn muốn * cụ thể * chỉ là phần' http: // www.google.com'? – Arran

+0

Khi tôi chạy ứng dụng, nó sẽ đi đến một url như http: // localhost: 12345/Login (điều này sẽ khác nhau tùy thuộc vào máy), sau đó tôi muốn trình điều khiển truy cập trang như http: // localhost : 12345/Phản hồi. Vì vậy, tôi chỉ muốn http: // localhost: 12345/part vì tôi không thể hardcode một liên kết đến nó trong mã của tôi vì nó sẽ khác nhau trên mọi máy. – user2184530

Trả lời

13

Cách tốt nhất xung quanh việc này là tạo một phiên bản Uri của URL.

Điều này là do Uriclass trong .NET đã có sẵn mã để thực hiện việc này chính xác cho bạn, vì vậy bạn chỉ nên sử dụng điều đó. Tôi muốn đi cho một cái gì đó giống như (mã chưa được kiểm tra):

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

Về cơ bản, bạn là sau khi Authority property trong lớp Uri.

Lưu ý, có thuộc tính thực hiện điều tương tự, được gọi là Host nhưng điều này không bao gồm số cổng mà trang web của bạn thực hiện. Đó là một cái gì đó để ghi nhớ mặc dù.

+0

Cảm ơn, hoạt động hoàn hảo. – user2184530

0

Hãy thử cụm từ thông dụng này được lấy từ answer này.

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

Lấy driver.Url, quăng nó vào một mới System.Uri, và sử dụng myUri.GetLeftPart(System.UriPartial.Authority).

Nếu URL cơ sở của bạn là http://localhost:12345/Login, điều này sẽ trả lại cho bạn http://localhost:12345.

Các vấn đề liên quan