PHPUnit+;Selenium测试div是否具有css类 问题:
如何使用PHPUnit和Selenium检查div是否具有特定的css类或其他属性 背景 我一直在使用PHPUnit和Selenium在许多站点上执行功能测试。测试目前正在扩展PHPUnit_Extensions_SeleniumTestCase,但如果PHPUnit_Extensions_SeleniumTestCase能够提供更好的解决方案,那么我对使用PHPUnit_Extensions_SeleniumTestCase没有问题 测试示例 这是一个测试的例子,真实世界的使用要复杂得多,因为测试类被抽象成几个子类,我的测试用例扩展了这些子类 在本例中,我希望能够单击一个按钮(some_按钮)并检查一个div(some_div)是否具有css类“active”PHPUnit+;Selenium测试div是否具有css类 问题:,php,selenium,phpunit,Php,Selenium,Phpunit,如何使用PHPUnit和Selenium检查div是否具有特定的css类或其他属性 背景 我一直在使用PHPUnit和Selenium在许多站点上执行功能测试。测试目前正在扩展PHPUnit_Extensions_SeleniumTestCase,但如果PHPUnit_Extensions_SeleniumTestCase能够提供更好的解决方案,那么我对使用PHPUnit_Extensions_SeleniumTestCase没有问题 测试示例 这是一个测试的例子,真实世界的使用要复杂得多,因为
class ExampleTest extends PHPUnit_Extensions_SeleniumTestCase {
protected $captureScreenshotOnFailure = true;
public function setUp() {
//Load some base application configuration and set $base_url
$this->setBrowser('firefox');
$this->setBrowserUrl($base_url);
}
public function testIfButtonChangesClass() {
$this->open("/test_page");
$this->select("id=some_combo", "value=2");
$this->assertFalse($this->isVisible('id=some_button'));
$this->click("id=some_button");
//How do I test if some_div has the class active? it would be nice to do
//something like this?
$this->assertTrue($this->hasClass('id=some_div','active'));
}
}
}
最简单的方法就是断言所需类的存在。例如,假设您有一个id为的div:
<div id="mydiv">blah</div>
div#mydiv
将以某种方式存在div#mydiv.someclass
仅当添加了类someclass
时才会存在
请注意,我的断言语法与您的略有不同-我使用的是一步
assertElementPresent
方法。PHPUnit\u Extensions\u SeleniumTestCase
类公开了一大堆与Selenium文档中的断言相匹配的有用断言。在Selenium 2中,使用PHPUnit\u Extensions\u Selenium2TestCase
语法,更鼓励您使用PHPUnit标准断言,只使用Selenium访问页面元素(而不是v1中两者的混合)
你可以做:
$element = $this->byId('some_div');
$this->assertContains('active', $element->attribute('class'));
或者类似于Kryten的回答,您可以尝试“获取”元素并让它失败,或者处理异常以转换为失败,甚至继续:
try{
$element = $this->byByCSSSelector('div#some_div.active');
}
catch(PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
$this->fail('Class "active" not found. '.$e->getMessage());
}
就我个人而言,我更喜欢第一种方法。956个视图,只有一个向上投票,我现在担心这个社区。这些有用的断言样式方法在v2中已经消失了,似乎你只需要选择元素(使用别名或类似名称)然后捕获异常?如果我找到了规范形式,我将发布第二个答案。。。
try{
$element = $this->byByCSSSelector('div#some_div.active');
}
catch(PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
$this->fail('Class "active" not found. '.$e->getMessage());
}