Всего комбинаций может получится 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 чек боксов.
Если будут какие-то замечания, буду рад прочитать...


