Всего комбинаций может получится 2^8 = 255 комбинаций.
Очень затруднительно написать 255 кейсов для которых задавать комбинацию по-своему.
Хотелось бы в тест кейс передвавать комбинацию отмеченных чек боксов в виде цифры - например
11010010 = 210
11010011 = 211
Я решил эту проблему написанием следующей функции:
function cbust($val,$arr_1) { $res = 1; for ($i=1;$i<=count($arr_1); $i++) { if ($val&$res){$arr_check[$i]=true;}else{$arr_check[$i]=false;} $res = $res << 1; } foreach ($arr_1 as $k => $v) { if ($arr_check[($k+1)]===true) { $flag = $this->isElementPresent($v); if ($flag!==true){$this->fail("Element $v is not present to check!");} $flag = $this->isChecked($v); if ($flag === true){} //nothing to do, it already cheked! else {$this->click($v); $flag = $this->isChecked($v); //is click make some action? if ($flag!==true){$this->fail("Element $v can not be checked!");} } } elseif ($arr_check[($k+1)]===false) { $flag = $this->isElementPresent($v); if ($flag!==true){$this->fail("Element $v is not present to uncheck!");} $flag = $this->isChecked($v); if ($flag===true) {$this->uncheck($v); $flag = $this->isChecked($v); //is uncheck make some action? if ($flag===true){$this->fail("Element $v can not be UNchecked!");} } else {} //nothing to do! } else { $this->fail('Oops, not true and not false...??'); //value of $arr_1 may be not set... } } $status = 'ok'; //for some reasons... It's pleasure to hear that all ok! return $status; }
где $val - числовой код комбинации, $arr_1 - массив XPAth чек боксов на странице.
У меня он выглядит так:
<?php return ( array ( '//input[@id=\'disp_field0\' and @type=\'checkbox\' and @value=\'short_item_name\']', '//input[@id=\'disp_field1\' and @type=\'checkbox\' and @value=\'long_item_name\']', '//input[@id=\'disp_field2\' and @type=\'checkbox\' and @value=\'short_desc\']', '//input[@id=\'disp_field3\' and @type=\'checkbox\' and @value=\'long_desc\']', '//input[@id=\'disp_field4\' and @type=\'checkbox\' and @value=\'price\']', '//input[@id=\'disp_field5\' and @type=\'checkbox\' and @value=\'icon_link\']', '//input[@id=\'disp_field6\' and @type=\'checkbox\' and @value=\'image_link\']', '//input[@id=\'disp_field7\' and @type=\'checkbox\' and @value=\'link_page\']', '//input[@id=\'disp_field8\' and @type=\'checkbox\' and @value=\'item_code\']', '//input[@id=\'disp_field9\' and @type=\'checkbox\' and @value=\'item_status\']' ) ) ?>
здесь используется поразрядное сравнение $val с единицей, если true - значить xpath в массиве нужно отметить, если false - значит отмечать не нужно.
по моему получилось очень удобно и в тесте можно вызвыать как
$arr_2 = include_once ('./XPath/array2.php'); self::cbust($s2_p, $arr_2);
- например, если $s2_p будет равно 14, а всего элементов 8, то 14 = 1110,
00001110 - пример разметки 8 чек боксов.
Если будут какие-то замечания, буду рад прочитать...