如何检查div是否具有PHPUnit和Selenium的特定css类或其他属性?
我一直在使用PHPUnit和Selenium在许多站点上执行功能测试。测试目前正在扩展PHPUnit_Extensions_SeleniumTestCase,但如果它能提供更好的解决方案,我使用PHPUnit_Extensions_Selenium2TestCase没有问题。
这是一个测试的例子,实际使用情况要复杂得多,测试类被抽象为我的测试用例扩展的几个子类。
在这个示例中,我希望能够单击一个按钮(some_button)并检查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'));
}
}
}
答案 0 :(得分:1)
最简单的方法就是断言所需类的存在。例如,假设您有一个带有id的div:
<div id="mydiv">blah</div>
你有一些Javascript可以添加类&#34; someclass&#34;单击按钮时从div中显示:
$this->click("id=mybutton"); // this click should add the class
// now test to see if the class has been added
$this->assertElementPresent("css=div#mydiv.someclass");
div#mydiv
会以这种或那种方式存在。只有在添加了课程div#mydiv.someclass
后才会存在someclass
。
请注意,我的断言语法与您的语法略有不同 - 我使用的是一步assertElementPresent
方法。 PHPUnit_Extensions_SeleniumTestCase
类公开了一大堆与Selenium文档中的断言相匹配的有用断言。
答案 1 :(得分:0)
在具有PHPUnit_Extensions_Selenium2TestCase
语法的Selenium 2中,我们鼓励您使用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());
}
我个人更喜欢第一种方法。