单击标签或Div内的复选框

时间:2019-05-30 06:20:19

标签: c# selenium

我想创建两种方法,一种方法是单击特定的复选框,另一种方法是取消选择相同的复选框。 我试图使用XPath和ID,但无法这样做。 请告诉我该怎么做。这是HTML:

IJavaScriptExecutor js = (IJavaScriptExecutor)_driver;
            js.ExecuteScript("window.scrollBy(200,document.body.scrollHeight)", "");
            var mileageTextbox = driver.FindElement(By.Id("VehicleMileageMax"));
            mileageTextbox.SendKeys("9500");
            var checkBox = driver.FindElement(By.XPath("//label[text()='financial-check-all-8']::input[@type='checkbox'")); 
            Thread.Sleep(2000);
            checkBox.Click();

元素不可见

HTML代码:

<input id="financial-check-all-8" type="checkbox" selected="filter.isDisabled" ng-model="filter.isDisabled" ng-change="vm.emptyFilterValue(filter);" class="ng-pristine ng-untouched ng-valid ng-empty" aria-invalid="false" tabindex="44"> <label for="financial-check-all-8" id="enabled-8" class="form-checkbox-label"></label>

1 个答案:

答案 0 :(得分:0)

您可以尝试使用以下代码:

//input[starts-with(@id,'financial-check-all') and @ng-model='filter.isDisabled']

代码:

var checkBox = driver.FindElement(By.XPath("//input[starts-with(@id,'financial-check-all') and @ng-model='filter.isDisabled']")); 
checkBox.Click();

编辑: 根据共享HTML,您可以使用以下xpath: 尝试在单击之前也等待,只需尝试Thread.Sleep(4000);,如果可行,那么我们可以轻松地将其替换为 webdriverwait

//label[@for='VehicleMileageMax']/../preceding-sibling::div/descendant::input

或使用此xpath:

//label[@for='VehicleMileageMax']/../preceding-sibling::div/descendant::label