Не можете нажать на вход 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 с абсолютного на относительный....