2016-08-29 4 views
3

Я пытаюсь выбрать опции «Да» «Нет» на странице, так как обычно «Click()» не работает. Я использовал JSExecutor для этого! Проблема в том, что он выбирает параметры, но значение никогда не отправлялось в качестве ввода, и приложение бросает ошибку, когда я пытался продолжить.Выбор кнопки радио с использованием Javascript-исполнителя

Пробовал 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> 
+0

Я боюсь, что я не получил эту роль ", но значение никогда не отправлялось в качестве входных данных », можете ли вы подробно остановиться на этом? Вы говорите, что опция выбрана, но я не понимаю, в чем проблема. Можете ли вы также опубликовать исключение? –

ответ

2

Позвольте мне увидеть, если я правильно понял, вы пытаетесь выбрать «да» или «нет» на этот элемент, но я вижу, что элемент вы клике вход. Вам также нужно отправить «значение» на вход, кроме нажатия элемента.

Im догадываясь, что ваша проблема не защелкивающийся с 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"); 

Надеюсь, что это поможет.

+0

Ввод - это только переключатель, поэтому sendkeys не требуется. Если мы просто применим javascript .checked = true, он должен работать, но нам нужно было подождать до запуска javascript. Выложили ответ. –

+0

Правильно, я не видел атрибут @type на html. –

+0

Использование JavaScript Executor. Я могу выбрать переключатель, но опция не является рендерингом в конце, что не позволяет мне перейти с этой страницы! @Satish: Я тоже использовал wait. – Joe

1

Включение ожидания элемента перед выполнением javascript решило проблему. Вот рабочий код для обоих, используя JavaScript и без JavaScript (с помощью webelement клик):

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