如何在Selenium IDE中为一个测试套件的每个测试用例设置全局基本URL?

时间:2011-03-18 16:18:49

标签: selenium

如何为Selenium IDE中的一个测试套件的每个测试用例设置全局基本URL,以便我可以轻松切换到不同的环境?

8 个答案:

答案 0 :(得分:33)

如果您在单个套件中有很多测试用例,那么更改每个套件的基本URL会很痛苦。而是为您需要切换的每个基本URL创建一个单独的大小写。例如,我将store https://testing.site.com/ myEnvironment保存为测试用例SetEnvTesting。我为我的生产站点SetEnvProduction创建了另一个案例。

然后,在测试用例中的每个相对URL的开头插入${myEnvironment}。例如,open ${myEnvironment}/login.aspx。 (如果您已经进行了大量测试,这可能会很痛苦。我建议您从现在开始添加它。)然后,只需将set-environment测试用例放在测试套件的开头即可。要将整个套件切换到另一个基本URL,只需在开始时添加一个不同的set-environment案例。另一个好处是你可以通过在中间放置一个不同的set-environment案例来切换套件中间的环境。

编辑:使用SetEnvironment测试用例的示例。

SetEnvironment案例: enter image description here

以下测试用例的示例。 enter image description here

注意

  1. 如何使用CurrentEnvironment变量。您可以为套件中的每个案例执行此操作。此外,您可以使每个单独的测试套件使用相同的SetEnvironment案例,因此它们都可以一起切换。

  2. 基本网址变得无关紧要。你本质上是在压倒它。

  3. 我希望这有用!

答案 1 :(得分:12)

测试用例HTML文件负责设置基本URL。在Selenium IDE中,您可以覆盖测试用例的基本URL。另一方面,测试套件只是测试用例的一个包。

从测试套件中引用的每个测试用例文件中删除基本URL设置。然后手动为测试套件设置基本URL并运行套件。

有问题的行位于每个测试用例文件的开头:

<link href="http://server-name/" rel="selenium.base"/>

如果缺少,则基本URL会自动覆盖它。

答案 2 :(得分:9)

我发现非常令人沮丧我不能只有一个空白的基本URL,并让它使用我已经打开的任何页面作为测试的开始。能够记录相对网址时,有什么意义强制您对基本网址进行硬编码,并将其作为每个相对网址的前缀(从而将其转换为absoulte网址)? ?

扩展其他答案和此问题:In Selenium IDE, how to get the value of the base url

您可以将当前域存储在变量中,然后使用该变量而不是硬编码变量。这使您可以登录到要运行测试的服务器,点击播放,它将运行测试而不会将所有这些baseURL废话重定向到错误的服务器。

只需在套件中第一个脚本的开头使用这些命令: store current server

并继续对脚本中所需的每个真正相对网址使用http://${host}/语法。

答案 3 :(得分:6)

我刚刚创建了一个单独的测试并将其放在所有测试的顶部。将基本URL存储到变量,现在我可以通过$ {variable_name}在其他测试用例中访问它。

答案 4 :(得分:1)

我尝试了接受的答案,它确实适用于selenium IDE,但在运行stand-alone server时无效。

最后,我将值放在user-extensions.js中,并使用storeEval来获取值。然后可以在不同的情况下检索相同的值。

编辑:

在user-extensions.js中,添加以下内容

var selenium_base_url = "http://example.com"

在HTLM套件中,添加以下内容

<tr>
    <td>storeEval</td>
    <td>selenium_base_url</td>
    <td>case_base_url</td>
</tr>
<tr>
    <td>open</td>
    <td>${case_base_url}/case_path?a=1&b=2</td>
    <td></td>
</tr>

第一眼看上去可能很奇怪,但实际上user-extension.js可以在stand-alone server执行之前动态修改,因此您可以在真实QA中使用脚本放置不同的基本URL场景。

答案 5 :(得分:0)

嗯,我认为有一个更简单的解决方案:

  • 在第一次测试(测试套件)中进行调整 <link rel="selenium.base" href="http://google.com" />根据需要

  • 在以下测试中删除(使用文本编辑器或类似): <link rel="selenium.base" ... />

答案 6 :(得分:0)

如果您可以多次双击,

  1. 双击顶部的一个,将其设置为您想要的URL。
  2. 现在双击顶部,中间,底部。
  3. 现在双击底部,中间,顶部。

答案 7 :(得分:0)

我创建了一个用户扩展命令'doBaseURL'来操纵Selenium IDE字段'Base URL'。 在测试套件的每个测试用例中,我添加了此命令| baseURL | | |。在表面下方,它设置了一个名为baseURL的存储变量。 在第一个'baseURL'命令之前,可以从存储的变量'baseURL'中为测试用例命令提供一个值。 此方法将覆盖每个测试用例文件的<link href="http://server-name/" rel="selenium.base"/>设置。 对我来说这很好,因为现在Selenium IDE反映了测试用例将使用的基本URL(或在发生错误时使用)。

java脚本是:

Selenium.prototype.doBaseURL = function(strTarget, strValue) {
/**
  * Enables a more predictive Base URL when running a test suite with multiple test cases. 
  * On first usage it wil fill a stored variable 'baseURL' either with the given strTarget,
  * or when not given with the Base URL as shown on the Selenium IDE UI. The Selenium IDE UI field
  * Base URL is updated to reflect the (new) base URL. 
  * In each subsequent test case with a baseURL command the stored variable 'baseURL' will determine
  * the base.
  *
  * <p> Best to use as first command in each test case and only in the first test case a strTarget
  * argument, in that way the test cases of a test suite will no longer depend on their 'hidden'
  * '<link rel="selenium.base" href="http://www.something.com/" />
  * construction, that makes test cases effectively having an absolute base URL.
  * </p>
  *
  * @param strTarget a Base URL value to be used in the test case (e.g. https://www.google.com/)
  */

// pushes the given strTarget into the selenium.browserbot.baseUrl
// and makes the new Base URL value visible on the Selenium IDE UI.
// A subsequent open command will use this new Base URL value

LOG.debug("begin: doBaseURL | " + strTarget + " | " + strValue + " |");

// note:    window.location.href = strTarget;      causes the browser to replace Selenium-IDE UI with the given url
// used that knowledge to manipulate the Selenium IDE UI as if a manual Base URL change was done.
LOG.debug("window.location.href= [" + window.location.href + "]");
LOG.debug("window.editor.app.getBaseURL() gives [" + window.editor.app.getBaseURL() + "]");

if (strTarget && (strTarget.substring(0,1)!="$")) { // only when strTaget has a value

strValue = "Base URL changed from [" + selenium.browserbot.baseUrl.toString() + "] into [" + strTarget + "]"; 
selenium.browserbot.baseUrl = strTarget.toString();

// set the visible Base URL value on the Selenium IDE UI to the new value
window.editor.app.setBaseURL(strTarget);
LOG.debug("updated into: " + window.editor.app.getBaseURL());

// remember this value for future calls
storedVars["baseURL"] = window.editor.app.getBaseURL();
LOG.debug("storedVars[\"baseURL\"] set to [" + window.editor.app.getBaseURL() + "]");

} else {
// no value =>  take storeVars["baseURL"] when set;
//      otherwise take Selenium IDE Base URL field.
if ((storedVars["baseURL"] != undefined) && (storedVars["baseURL"] != "")) {
    strValue = "Base URL changed from [" + selenium.browserbot.baseUrl.toString() + "] into [" + storedVars["baseURL"] + "]"; 
    selenium.browserbot.baseUrl = storedVars["baseURL"];

    // set the visible Base URL value on the Selenium IDE UI to the new value
    window.editor.app.setBaseURL(storedVars["baseURL"]);
    LOG.debug("updated from storedVars[\"baseURL\"]");
} else {
    strValue = "Base URL changed from [" + selenium.browserbot.baseUrl.toString() + "] into [" + window.editor.app.getBaseURL() + "]"; 
        selenium.browserbot.baseUrl = window.editor.app.getBaseURL();

    // remember this value for future calls
    storedVars["baseURL"] = window.editor.app.getBaseURL();
    LOG.debug("storedVars[\"baseURL\"] set to [" + window.editor.app.getBaseURL() + "]");
}
}
LOG.info(strValue);
LOG.debug("end: doBaseURL | " + strTarget + " | " + strValue + " |");
}

安装用户扩展脚本在“使用Selenium-IDE的用户扩展”部分SeleniumHQ文档中进行了说明:http://www.seleniumhq.org/docs/08_user_extensions.jsp