我遇到了类似的问题并使用了类似的解决方案 - 但我认为可能有用的确切要求有所不同。
如果您有两个具有相同标签文本的单选按钮会发生什么?当您有多个单选按钮组并且上面的解决方案只会在 DOM 中找到带有该标签的第一个按钮时,这是完全可能的 - 您可能希望它是第二个或第三个。
提供每个单选按钮组都在一个容器内,然后您可以从该容器开始,而不是通过整个 DOM 工作。
我对原始问题和稍微扩展的版本的解决方案都如下所示。
/**
* @When /^I check the "([^"]*)" radio button$/
*/
public function iCheckTheRadioButton($labelText) {
$page = $this->getMainContext()->getSession()->getPage();
foreach ($page->findAll('css', 'label') as $label) {
if ( $labelText === $label->getText() ) {
$radioButton = $page->find('css', '#'.$label->getAttribute('for'));
$radioButton->click();
return;
}
}
throw new \Exception("Radio button with label {$labelText} not found");
}
/**
* @When /^I check the "([^"]*)" radio button in "([^"]*)" button group$/
*/
public function iCheckButtonInGroup($labelText, $groupSelector){
$page = $this->getMainContext()->getSession()->getPage();
$group = $page->find('css',$groupSelector);
foreach ($group->findAll('css', 'label') as $label) {
if ( $labelText === $label->getText() ) {
$radioButton = $page->find('css', '#'.$label->getAttribute('for'));
$radioButton->click();
return;
}
}
throw new \Exception("Radio button with label {$labelText} not found in group {$groupSelector}");
}