9

我在不同的机器上使用 Selenium 来自动测试 MVC Web 应用程序。

我的问题是我无法获得每台机器的基本 url。

我可以使用以下代码获取当前网址:

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

但是当我需要导航到不同的页面时,这无济于事。

理想情况下,我可以使用以下内容导航到不同的页面:

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

我使用的一个可能的解决方法是:

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

有没有更好的方法可以做到这一点?

4

3 回答 3

17

解决此问题的最佳方法是创建UriURL 的实例。

这是因为 .NET 中的Uri 已经有代码可以完全为您执行此操作,因此您应该使用它。我会选择类似(未经测试的代码):

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

本质上,您是在类中的权威属性Uri之后。

请注意,有一个属性可以做类似的事情,称为Host但这不包括您的站点所包含的端口号。不过要记住这一点。

于 2013-08-27T14:40:45.967 回答
2

拿走driver.Url,折腾成新的System.Uri,然后使用myUri.GetLeftPart(System.UriPartial.Authority)

如果您的基本 URL 是http://localhost:12345/Login,这将返回您http://localhost:12345

于 2013-08-27T13:14:12.260 回答
0

试试这个取自这个答案的正则表达式。

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);
于 2013-08-27T12:34:16.957 回答