无法点击HTML标签内的输入类型=“无线电”?

时间:2016-06-23 08:05:59

标签: java selenium selenium-webdriver cucumber-jvm

我遇到问题,我无法使用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中有先前的单选按钮,上面有标签,并且标签上有ID(这个没有)。 我只是引用标签ID并点击它而不是它的工作原理。但是这个没有标签的ID,我想避免使用xpath,但是,如果我别无选择,那么我只需通过xpath / css选择。

我也尝试过定位器名称,即By.className(“same-supplier”);并使用For循环和if语句来存储输入类型=无线电元素,仍然不起作用。

问题:为什么我不能点击输入类型=“无线电”,为什么Selenium看不到?是因为它嵌套在Label中吗?如果是这样,有没有人知道如何使用id点击它或者只是到达元素?

谢谢。

注意:我正在使用Java 7 for Selenium。

3 个答案:

答案 0 :(得分:2)

在聊天对话中,我可以尝试使用您正在使用的网站上的一些内容。 radio永远不可见。因此,不可能在其上使用click()方法。

但是,包含此label的{​​{1}}可见。这意味着您可以在此标签上使用radio

click()

或者,如果您真的想使用driver.findElement(By.cssSelector("label[for='same-supplier-no']")).click(); 找到该元素,可以使用radio

xpath

答案 1 :(得分:0)

使用动作点击标签,然后使用:

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();

答案 2 :(得分:0)

点击&#34;找到邮编&#34;按钮,添加以下两行代码 -

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

这在我的工作中起作用了...... 您可以将xpath从绝对更改为相对....