Seleniumスクリプト(Selenium IDEからのプレーンなHTML保存スクリプト)内からbase urlの値を取得することは可能ですか?
私がやろうとしているのは、assertLocation
を使用して現在のURLを確認することです。ただし、assertLocation
は絶対URLを返します。 URLの先頭に*
を使用せずに、現在のURLを相対URLと比較したいと思います。
さまざまなサイト(さまざまな開発サイト+本番サイト)でテストを実行できるようにしたいので、ベース文字列にアクセスしたいのですが、*
を使用すると、ルートを確認できません。ページ(*/
は、/
...で終わる各ページに当てはまります)
これは私が現在行っていることです:
| assertLocation | */some-page | |
これが私がやりたいことです:
| assertLocation | baseURL + "/ some-page" | |
注:次のことも可能ですか?
これを試して
storeEval|window.document.domain|Host
assertLocation|http://${Host}/some-page|
ベースページを開き、storeLocationを使用して現在の場所を変数に入れることもできます。
|open|/||
|storeLocation|Host||
|assertLocation|${Host}somepage.html
ボーナス:対応するSSLURLを計算する方法は次のとおりです
|storeEval|window.document.location.toString().replace(new RegExp("^http://([^:]+):80"), "https://$1:40");|hostSSL|
上記の解決策は、私の開発環境が非標準のポートにあるという問題を引き起こします。このソリューションは、httpsにも役立つ場合があります。本当にベースURLが必要な場合:
<tr>
<td>storeEval</td>
<td>Selenium.browserbot.baseUrl</td>
<td>baseurl</td>
</tr>
<tr>
<td>echo</td>
<td>${baseurl}</td>
<td></td>
</tr>
Selenium IDEを使用すると、これは$(Host)値を保存せずに実行できます。
Command: open
Target: */login
Value:
Selenium Coreで使用可能なこのスニペット文字列一致パターン [Source] 。
<tr>
<td>storeLocation</td>
<td>url</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>${url}</td>
<td></td>
</tr>
VerifyLocation Selenium IDEコマンド(検証するホスト名のみを提供し、実行時に広くランダムになる可能性のあるクエリ文字列の一部を含む)の使用に苦労した後、検証する方法(これまでのところ)最も柔軟な現在のURLとパスは、「verifyEval」コマンドを使用し、javascriptを使用してテストするURLの部分を解析することです。
verifyEval | window.location.pathname=="/my/stuff" | true
Javascriptがサポートする任意のロケーションプロパティを配置して、それらをテストできます( https://Gist.github.com/jlong/2428561 を参照)...
Command: verifyEval
Target: window.location.pathname=="/my/stuff"
Value: true
または例:
Command: verifyEval
Target: window.location.hostname=="example.com"
Value: true
または、お気軽に組み合わせてください
Command:verifyEval
Target: window.location.protocol+'//'+window.location.hostname+window.location.pathname=='http://example.com/my/stuff'
Value:true
Seleniumドライバーを使用して、現在のUrlを文字列として取得し、オブジェクトをURLオブジェクトに変換できます。それが完了すると、Java URLクラスには、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;
}