我将通过分解您需要的信息来回答您的问题
我需要为测试提供特定的环境(ie6-on-xp、ie7-on-xp 等)。
好吧,既然你不能在同一台机器上拥有多个 IE 实例,我知道有一些应用程序可以让你这样做,但根据我的经验,它们会导致比解决问题更多的问题。理想情况下,您希望不同的机器运行测试。通过这样做,您还为您的开发人员设置了一个硒农场,因为他们可以针对特定实例进行测试。因此,将网格设置为基础设施是一个很好的步骤。
对于我一直在阅读的内容,grid_configuration.yml 中的浏览器行没有提及我正在运行的 MSIE 或 Firefox 版本。所以我无法弄清楚我可以以哪种形式告诉 Grid/RC 我想要一些特定的浏览器以及运行它们的路径(RC 如何知道要运行哪个 exe?)
YAML 只是让您知道网格可以处理什么。启动网格时,您需要确保传入类似的配置。像 Se:RC 一样考虑 Se:GRID,只是你不关心 RC 服务器在哪里,因为你与一个为你解决其余问题的中心位置对话。
如果您需要它来针对特定项目运行测试,那么您需要在测试设置中处理此问题。有一个普遍的误解,即所有测试在每个浏览器中都运行相同。如果您在测试中从不依赖 XPath 或 CSS 选择器,就会发生这种情况,因为浏览器处理这种情况的方式总是略有不同,而这些细微的差异可能会导致测试不稳定,而应该始终避免这种情况。
指定用于测试的浏览器的一种方法是拥有一个中央配置文件。在 C# 中,这将使用 app.config 为每个浏览器提供一个集合并执行
配置
<Firefox>
<addKey browserVersion='3.5.6' OS='WindowsXP'>
</Firefox>
中央配置类 查看 1 个元素
public class BoothElement : ConfigurationElement
{
[ConfigurationProperty("browserVersion", DefaultValue = "", IsKey = true, IsRequired = true)]
public string browserVersion
{
get
{
return ((string)(base["browserVersion"]));
}
set
{
base["browserVersion"] = value;
}
}
测试
selenium = new DefaultSelenium(HubPort, HubPort, browserVersion, SUTServer);
selenium.Open("/test.htm");
//Rest of the test
在 python 中,您可以在包含在所有测试中的模块中创建一个数组
包括.py
hubServer = 'hub'
hubPort = 5555
sut = 'http://serverUnderTest'
firefox = [hubServer,hubPort,"\*chrome",sut]
iexplore = [hubServer,hubPort,"\*iehta",sut]
测试.py
sel = selenium(firefox)
sel.open("/test.html")
#rest of the test
在使用 Selenium Grid 时,请尝试将其更多地视为测试基础设施帮助框架,希望这对您有所帮助。
其次,我想运行这些浏览器的便携版本。我只看到在测试中指定的,而不是在 RC 的命令行中运行它们。每次测试,这就是这样做的方法吗?
我从未尝试过让 Selenium 在移动浏览器上工作,并且认为它不会很好地工作,但是使用目前处于 alpha 的 Selenium 2 有 android 支持来测试应用程序。
从评论中编辑
- name: "Firefox on OS X"
browser: "*firefox"
- name: "Firefox on Linux"
browser: "*firefox"
- name: "IE on Windows"
browser: "*iehta"
- name: "Safari on OS X"
browser: "*safari"
假设我们有上述设置,根据 YAML 文件,我们有许多不同的 *firefox 实例。所以在我们的测试中调用这些不同的,我们的浏览器设置命令看起来像
selenium.Start(hubHost, hubPort, "Firefox on Linux", "http://serverUnderTest");
或者selenium.Start(hubHost, hubPort, "Firefox on OS X", "http://serverUnderTest");
集线器将为您将其翻译成 *firefox。我更喜欢为我的环境使用非常细化的名称,而不是通常的 *firefox,这样如果出现故障,更容易发现它在哪里以及在哪个特定浏览器上。