Не можете нажать на вход type = "radio", который находится внутри метки HTML?

У меня есть проблема, когда я не могу нажать на тип ввода = "радио", используя id="same-supplier-no":

<label for="same-supplier-no" ng-class="{checked: !ctrl.energyModel.BillViewModel.SameSupplier}" class="">

  <input type="radio" id="same-supplier-no" name="same-supplier" ng-model="ctrl.energyModel.BillViewModel.SameSupplier" ng-value="false" ng-change="ctrl.sameSupplierValueChanged(); ctrl.analyticsProvider.sendVirtualPageView('SameSupplierNo')" class="ng-pristine ng-untouched ng-valid" value="false">

   <span></span>No

</label>

В Selenium, когда я делаю:

driver.findElement(By.id("same-supplier-no")).click();

он говорит, что "элемент не виден". В HTML есть предыдущие переключатели, на которых есть ярлыки, и у них есть идентификаторы для ярлыков (этого нет). Я просто ссылаюсь на идентификатор ярлыка и нажимаю на него, и он работает. Но у этого нет идентификатора для метки, и я хочу избежать использования xpath, однако, если у меня нет выбора, я просто выберу через xpath /css.

Я также пытался с помощью имени локатора, т.е. By.className("тот же поставщик"); и использование цикла For и оператора if для хранения элемента input type=radio по-прежнему не работает.

Вопрос: почему я не могу нажать на вход type = "radio", почему в Selenium его не видно? Это потому, что он вложен в метку? Если так, кто-нибудь знает, как я могу щелкнуть по нему с помощью идентификатора или просто добраться до элемента?

Спасибо.

Примечание: я использую Java 7 для Selenium.

3 ответа

Решение

Из разговора в чате я мог бы попробовать кое-что на веб-сайте, который вы используете. radio никогда не становится видимым В результате этого невозможно использовать click() метод на это.

label который содержит это radio видимо однако. Это означает, что вы можете просто использовать click() на этом ярлыке.

driver.findElement(By.cssSelector("label[for='same-supplier-no']")).click();

Или, если вы действительно хотите найти элемент, используя radio вы могли бы использовать xpath,

driver.findElement(By.xpath("//*[@id='same-supplier-no']/parent::label")).click();

Используйте действие, чтобы щелкнуть метку, и после этого используйте:

Actions actions = new Actions(driver);
                IWebElement menuHoverLink = driver.findElement(By.XPath("//label[@for='same-supplier-no']"));
                actions.moveToElement(menuHoverLink);
                actions.click();
                actions.perform();

driver.findElement(By.id("same-supplier-no")).click();

После того, как вы нажмете кнопку "найти почтовый индекс", добавьте ниже две строки кода -

WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath(".//*[@id='same-supplier-question']/div/div/label[2]/span"))));

Это сработало на моем конце... Вы можете изменить xpath с абсолютного на относительный....

Другие вопросы по тегам