Когда вы наводите курсор на элемент в инструментах браузера, видите ли вы какой-либо видимый / выделенный элемент? Если нет, то это первое указание на то, что Selenium также не сможет его найти.
Ваш XPath искал дочерний элемент span для элемента с идентификатором «BureauConcentInput», однако диапазон был родственник (например, он находился на том же уровне дерева документа, что и элемент). Есть несколько способов добраться до диапазона, но вот два:
//input[@id='BureauConcentInput']/..//span
//input[@id='BureauConcentInput']/following-sibling::span
Без необходимости видеть страницу или знать, к какой структуре пользовательского интерфейса принадлежат переключатели (dl-slider), этот ответ будет моим Лучшее предположение, поскольку диапазон не кажется мне интерактивным элементом в его текущем состоянии:
driver.FindElement(By.XPath("//input[@id='BureauConcentInput']/ancestor::span")).Click();
Обновление:
Похоже, что ваша панель навигации нижнего колонтитула внизу страница находится над флажком, который нужно установить. Вы можете сначала попытаться перейти к элементу, а затем щелкнуть. Проверьте размер окна - это тоже может быть проблемой.
Вот метод расширения для Scroll:
public static IWebElement Scroll(this IWebElement element)
{
IWebDriver driver = ((IWrapsDriver)element).WrappedDriver;
string script = "const elementRect = arguments[0].getBoundingClientRect();" +
"const absoluteElementTop = elementRect.top + window.pageYOffset;" +
"const middle = absoluteElementTop - (window.innerHeight / 2);" +
"window.scrollTo(0, middle);";
((IJavaScriptExecutor)driver).ExecuteScript(script, element);
return element;
}
Вы можете использовать его прямо перед Click () - например, driver.FindElement().Scroll().Click();
Если это не сработает, ваш следующий вариант - использовать метод scrollIntoView () js:
public static void ScrollIntoView(this IWebElement driver, string xpath)
{
((IJavaScriptExecutor)driver).ExecuteScript($"document.evaluate(\"{xpath}\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView()");
}
Вам нужно будет использовать его в отдельной строке - например, driver.ScrollIntoView("insert xpath here");