Selenium:查找基本Url

本文关键字:Url 查找 Selenium | 更新日期: 2023-09-27 18:29:06

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

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

我可以使用以下代码获取当前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");

有更好的方法吗??

Selenium:查找基本Url

最好的方法是创建URL的Uri实例。

这是因为.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类中查找Authority属性。

请注意,有一个属性也做类似的事情,称为Host,但它不包括端口号,而您的站点会这样做。不过,这是需要记住的。

driver.Url,将其放入新的System.Uri中,然后使用myUri.GetLeftPart(System.UriPartial.Authority)

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

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

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