2016-08-09 2 views
1

Я пишу код для проверки веб-страницы с использованием Selenium в C#, и мне нужно щелкнуть флажок с динамически сгенерированными параметрами. Вот отрывок из HTML:Selenium - Щелчок флажка по метке

<input type="checkbox" value="2948" onclick="locBoxOnClick(this, 0);" name="locCombo2948"> 
    <label for="locCombo2948"> 
    AL   
    <br> 
    </label> 

я могу найти ярлык с помощью XPath, но когда я пытаюсь на самом деле нажмите на поле, ничего не происходит.

Код:

By.XPath("(//*[contains(text(), '" + appDto.StatePicker_SpecificCheckbox +  "')])").Click(); 

EDIT: Наконец решил его помощью несколько гетто метод, но он работает:

By.XPath(".//label[contains(text(), '" + appDto.StatePicker_SpecificCheckbox  + "')]/../input") 

В основном вы найдете ярлык, перейдите к родительскому узлу, а затем перейти к это входной дочерний узел. Надеюсь, это поможет кому-то еще с этой проблемой!

ответ

0

На самом деле вы используете неправильный xpath, ваше условие xpath является поиск label элемента в то время как вам нужен input элемента с помощью label, Таким образом, вы должны попробовать, чтобы выбрать флажок с помощью текста метки с ниже XPath: -

appDto.StatePicker_SpecificCheckbox = "AL" 

By.XPath(".//input[following-sibling::label[contains(., '" + appDto.StatePicker_SpecificCheckbox + "')]]").Click(); 
+0

Он вернул исключение NullReferenceException, когда я попытался, к сожалению :( – JohnDoe2016

+0

Как вы пробовали? не могли бы вы поделиться пожалуйста ?? –

+0

Для предоставленного HTML это будет 'driver.FindElement (By.XPath (" .// input [next-sibling :: label [содержит (., 'AL')]] ")). Click();' –

0

В вашем HTML есть недостаток - значение атрибута for метки should reference an ID (locCombo2948). Однако вход не имеет идентификатора, только имя. Таким образом, нажав на метку (поскольку ваш селектор xPath на самом деле нацелен на ярлык, а не на флажок), это не будет иметь никакого эффекта.

Не знаю, можете ли вы исправить HTML. Если нет, то вы можете просто нажать на самом флажке, используя что-то вроде

By.CssSelector("input[name='locCombo2948']").Click() 
+0

Я предпочел бы не делать это таким образом, потому что тогда я был бы нужен словарь для каждого Location-ID комба – JohnDoe2016

0

Вашего XPath находит <label> элемента, а не <input> элемента. В некоторых браузерах это невозможно. Попробуйте выполнить поиск <input> элемента, содержащих <label> элемента:

//*[contains(text(), '" + appDto.StatePicker_SpecificCheckbox + "')]/ancestor::input 
+0

Это возвращенное пустой ссылкой исключение, к сожалению :( – JohnDoe2016

0

Я предлагаю вам с помощью этого: XPath

string Xpath = $"//input[.//label[contains(.,{appDto.StatePicker_SpecificCheckbox})]]"; 

Надеется, что он работает с вами :)

Смежные вопросы