【问题标题】:How to click on a radio button using Selenium如何使用 Selenium 单击单选按钮
【发布时间】:2022-02-19 22:04:11
【问题描述】:

我正在尝试单击 selenium java 中的单选按钮,但没有单击。

这是单选按钮上的检查:

<input name="timeSyncType" class="radio" id="radioNTP" type="radio" ng-click="oSettingTimeInfo.szTimeMode='NTP'" ng-checked="oSettingTimeInfo.szTimeMode=='NTP'"> 

我试过了

WebElement radio =  driver.FindElement(By.id("radioNTP"));
radio.click();

我也试过了

WebElement rbutton = driver.findElement(By.xpath("//input[@id='radioNTP']"));
rbutton.click();

但没有运气,有什么帮助吗?

【问题讨论】:

    标签: java selenium xpath css-selectors radio-button


    【解决方案1】:

    首先,您必须确保此 ID radioNTP 在 HTMLDOM 中是唯一的。

    检查步骤:

    Press F12 in Chrome -> 转到element 部分 -> 做一个CTRL + F -> 然后粘贴//input[@id='radioNTP'] 看看,如果你想要的element 用@ 得到突出显示 987654327@匹配节点。

    如果是,那么在 Selenium 中执行点击的方法有很多。

    代码试用 1:

    Thread.sleep(5);
    driver.findElement(By.xpath("//input[@id='radioNTP']")).click();
    

    代码试用 2:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='radioNTP']"))).click();
    

    代码试用 3:

    Thread.sleep(5);
    WebElement button = driver.findElement(By.xpath("//input[@id='radioNTP']"));
    ((JavascriptExecutor)driver).executeScript("arguments[0].click();", button);
    

    代码试用 4:

    Thread.sleep(5);
    WebElement button  = driver.findElement(By.xpath("//input[@id='radioNTP']"));
    new Actions(driver).moveToElement(button).click().build().perform();
    

    如果否,那么您将不得不更改定位器并使用代表期望节点的定位器。

    PS:Thread.sleep(5);只是为了解决这个问题,如果上面的任何代码都有效,请将web元素替换为WebDriverWait。

    【讨论】:

      【解决方案2】:

      要点击元素,您可以使用以下任一locator strategies:

      • cssSelector:

        driver.findElement(By.cssSelector("input#radioNTP[name='timeSyncType'][ng-click^='oSettingTimeInfo']")).click();
        
      • xpath:

        driver.findElement(By.xpath("//input[@id='radioNTP' and @name='timeSyncType'][starts-with(@ng-click, 'oSettingTimeInfo')]")).click();
        

      但是,由于该元素是 Angular 元素,因此理想情况下要在该元素上使用 click(),您需要将 WebDriverWait 诱导为 elementToBeClickable(),并且您可以使用以下任一 locator strategies:

      • cssSelector:

        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#radioNTP[name='timeSyncType'][ng-click^='oSettingTimeInfo']"))).click();
        
      • xpath:

        new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='radioNTP' and @name='timeSyncType'][starts-with(@ng-click, 'oSettingTimeInfo')]"))).click();
        

      【讨论】:

      • 感谢您的回答,仍然没有其他想法?
      • 什么不起作用?有没有发现任何错误?
      • 我没有看到任何错误,只是不会点击。
      猜你喜欢
      • 2020-01-24
      • 2018-04-30
      • 2017-08-02
      • 2019-08-18
      • 1970-01-01
      • 2021-10-28
      • 2019-03-17
      • 2016-08-27
      • 2019-06-10
      相关资源
      最近更新 更多