使用 Javascript 执行器选择单选按钮

Radio Button selection using Javascript executor

我正在页面中尝试 select 'Yes' 'No' 选项,因为正常情况下 'Click()' 不起作用 我为此使用了 JSExecutor!问题是它正在 selecting 选项,但值从未作为输入发送,当我尝试继续时应用程序抛出错误。

以不同的方式尝试了 xpath!

WebElement st_1 = driver.findElement(By.id("app-select-no"));
 ((JavascriptExecutor)driver).executeScript("arguments[0].checked = true;", st_1);

下面是HTML

div class="form-group input-form-group col-xs-6">
<input id="app-select-no" class="form-control ng-pristine ng-untouched ng-valid ng-valid-required" type="radio" ng-value="false" ng-model="openAccount.abc" required="" name="affRadioGroup" value="false" aria-checked="true" tabindex="0" aria-required="false" aria-invalid="false"/>
<label class="field-label-radio text-bold active" ng-class="{active : openAccount.abc==false}" for="app-select-no">
<span translate-once="NO_BUTTON">No</span>
</label>
</div>

让我看看如果我明白了,您正在尝试对该元素进行 select "yes" 或 "no",但我看到您单击的元素是一个输入。除了单击元素外,您还需要将 "value" 发送到输入。

我猜你的问题不是 executeScript 的点击问题,但你也可以试试这个:

WebElement st_1 = driver.findElement(By.id("app-select-no"));
((JavascriptExecutor)driver).executeScript("arguments[0].click();", st_1 );

要向该输入发送一个值,您需要这样做:

driver.findElement(By.id("st_1")).sendKeys("value here");

希望对您有所帮助。

在执行 javascript 之前放置等待元素解决了问题。这是使用 javascript 和不使用 javascript(使用 webelement click)的工作代码:

driver.get("file:///home/sgupta/Desktop/a.html");
    WebElement radio = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input#app-select-no")));
    JavascriptExecutor executor = (JavascriptExecutor)driver.getDriver();
    executor.executeScript("arguments[0].checked=true", radio);

使用 WebElement 方法:

driver.get("file:///home/sgupta/Desktop/a.html");
WebElement radio = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input#app-select-no")));
radio.click();