Нажмите на флажок внутри метки или Div - PullRequest
1 голос
/ 30 мая 2019

Я хочу создать два метода: один для выбора определенного флажка и второй для отмены выбора того же флажка. Я пытался использовать 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 голосов
/ 30 мая 2019

Вы можете попробовать с этим кодом:

//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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...