Is it possible to retrieve the value of the base url from inside a Selenium script (a plain HTML-saved script from Selenium IDE)?
What I\'m trying to do
You can use Selenium driver to get the current Url as a String, then convert the object into a URL object. Once you have done that, the Java URL class has some methods that you can use to get parts of the URL.
String url = driver.getCurrentUrl();
String domain = getDomainName( url );
public static String getDomainName( String url ) throws URISyntaxException {
URI uri = new URI(url);
String domain = uri.getHost();
return domain.startsWith("www.") ? domain.substring(4) : domain;
}
After struggling with using the verifyLocation selenium IDE command (which only gives you the host name to verify, and will include parts of the query string which may be widely random at runtime) the way to verify the current url and path which is the most flexible (so far) is to use the "verifyEval" command and use javascript to parse out the portion of the url I want to test:
verifyEval | window.location.pathname=="/my/stuff" | true
You can put any of the location properties that javascript supports and test those (see https://gist.github.com/jlong/2428561)...
Command: verifyEval
Target: window.location.pathname=="/my/stuff"
Value: true
OR for example:
Command: verifyEval
Target: window.location.hostname=="example.com"
Value: true
Or feel free to make combinations
Command:verifyEval
Target: window.location.protocol+'//'+window.location.hostname+window.location.pathname=='http://example.com/my/stuff'
Value:true
<tr>
<td>storeLocation</td>
<td>url</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>${url}</td>
<td></td>
</tr>
You can also open your base page and use storeLocation to put the current location into a variable:
|open|/||
|storeLocation|host||
|assertLocation|${host}somepage.html
Bonus: here's how I figured out the corresponding SSL url
|storeEval|window.document.location.toString().replace(new RegExp("^http://([^:]+):80"), "https://$1:40");|hostSSL|
Try this
storeEval|window.document.domain|host
assertLocation|http://${host}/some-page|
Using Selenium IDE, this is do able without storing the $(host) value.
Command: open
Target: */login
Value:
This snippet string-match patterns available in the Selenium Core [Source].