我有一個類似的問題,並使用了類似的解決方案 - 但我的確切要求有一個轉折,我認爲可能會有用。
如果您有兩個帶相同標籤文字的單選按鈕,會發生什麼情況?當你有多個單選按鈕組時,這是完全可能的,上面的解決方案只能在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}");
}
這個答案適用於我,並且比爲已存在的東西添加整個額外方法簡單得多。 – DanielM
也爲我工作,但如果輸入元素與「顯示:無」,那麼它不工作。 – Reshma