对此的修复实际上取决于您的数据文件的外观。如果您可以发布,我们可以为您提供更多帮助。
目前我假设,因为 phpunit 本质上是一个一次性的单元测试框架,您不会尝试同时运行多个浏览器,而只是想保留更改浏览器的选项,因为您认为合适.
你是对的,你应该在 setUp 中使用 setBrowser。当 PHPUnit 执行时,总是先运行 setUp,最后运行 tearDown()。这里的一个好的做法是制作自己的自定义单元测试用例类,您可以在其中自定义这些方法。
class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase {
public $browser = "firefox";
public function setUp() {
$this->setBrowser("*".$browser);
}
}
现在,当您编写测试时,扩展您的个人测试类并相应地设置浏览器
class newTest extends customUnitTest {
$this->browser = "safari";
public function testBlah {
blah blah...
}
}
setUp 将在执行时运行,并将拉入浏览器变量。默认情况下,您将获得 firefox,但如果某些测试在其他浏览器上进行了更合适的测试,则您可以选择该选项。
如果您希望能够同时更改所有测试中的所有浏览器,您应该考虑根据环境变量分配浏览器值。
class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase {
try {
public $browser = getenv("SELENIUM_BROWSER");
} catch (Exception $e) {
public $browser = "firefox";
}
public function setUp() {
$this->setBrowser("*".$browser);
}
}
使用此设置,我们可以通过更改环境变量 SELENIUM_BROWSER 来为每个没有在其内部硬编码浏览器的测试更改浏览器。这样我们就可以在不同的服务器上使用不同的默认浏览器运行相同的代码,而无需重新编写任何东西。
请注意,多重继承不是好的做法。如果您没有正确地确定方法/变量的范围,它可能会导致脆弱的代码甚至安全威胁。但是在这种情况下它很有用,因为我们可以随意定义 PHPUnit 框架方法,并且我们在测试中获得了所有基本的 selenium 方法。所以要运行一个默认的 selenium 方法,我们只需编写
$this->open("www.google.com");
这是一种与将 selenium 分配给对象的一般方法大不相同的方法,因为您编写的测试是 selenium 对象,但它似乎更适合 php,尤其是对于这个用例。