Ответ 1
Попробуйте это
storeEval|window.document.domain|host
assertLocation|http://${host}/some-page|
Можно ли получить значение базового url изнутри селена script (простой с сохранением HTML script из Selenium IDE)?
То, что я пытаюсь сделать, это проверить текущий url, используя assertLocation
. Но 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
Бонус: здесь, как я выяснил соответствующий SSL-url
|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 [Источник].
<tr>
<td>storeLocation</td>
<td>url</td>
<td></td>
</tr>
<tr>
<td>echo</td>
<td>${url}</td>
<td></td>
</tr>
Вы можете использовать драйвер Selenium для получения текущего Url в виде строки, а затем преобразовать объект в объект URL. После того, как вы это сделали, класс URL-адреса Java имеет некоторые методы, которые можно использовать для получения частей 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;
}
После борьбы с использованием команды IDE verifyLocation selenium (которая дает только имя хоста для проверки и включает части строки запроса, которые могут быть широко случайными во время выполнения), способ проверки текущего 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