PHPUnit+;Selenium测试div是否具有css类 问题:

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没有问题 测试示例 这是一个测试的例子,真实世界的使用要复杂得多,因为

如何使用PHPUnit和Selenium检查div是否具有特定的css类或其他属性

背景 我一直在使用PHPUnit和Selenium在许多站点上执行功能测试。测试目前正在扩展PHPUnit_Extensions_SeleniumTestCase,但如果PHPUnit_Extensions_SeleniumTestCase能够提供更好的解决方案,那么我对使用PHPUnit_Extensions_SeleniumTestCase没有问题

测试示例 这是一个测试的例子,真实世界的使用要复杂得多,因为测试类被抽象成几个子类,我的测试用例扩展了这些子类

在本例中,我希望能够单击一个按钮(some_按钮)并检查一个div(some_div)是否具有css类“active”

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());
}