2016-08-29 4 views
3

Ich versuche, die 'Ja' 'Nein' Optionen auf einer Seite, wie normal 'Click()' funktioniert nicht Ich habe JSExecutor dafür verwendet! Das Problem ist, es ist die Auswahl der Optionen, aber der Wert wurde nie als Eingabe gesendet, und die Anwendung wirft Fehler, wenn ich versuchte, fortzufahren.Radio Button Auswahl mit Javascript Executor

Versuchte XPaths in Diff-Wegen!

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

Im Folgenden HTML ist

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

Ich habe Angst, dass ich nicht diesen Teil "bekommen haben, aber die Wert wurde nie als Eingabe gesendet ", können Sie das näher ausführen? Sie sagen, dass die Option ausgewählt wird, aber ich verstehe nicht, was das Problem ist. Können Sie die ausgelöste Ausnahme auch posten? –

Antwort

2

Lassen Sie mich sehen, ob ich verstanden, Sie versuchen, mit „Ja“ oder „Nein“ auf dieses Element zu wählen, aber ich sehe, dass das Element, das Sie klicken werden, ist eine Eingabe. Sie müssen auch den "Wert" an den Eingang senden, außer auf das Element zu klicken.

Im erraten, dass Ihr Problem nicht der Klick mit der ExecuteScript ist, aber Sie können dies auch versuchen:

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

und einen Wert an diesen Eingang zu schicken, yo Notwendigkeit, dies zu tun:

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

Ich hoffe, es hilft.

+0

Die Eingabe ist nur ein Optionsfeld, so dass Sendkeys nicht erforderlich sein sollten. Wenn wir nur javascript .checked = true anwenden, sollte es funktionieren, aber wir mussten warten, bevor wir das Javascript ausführen. Habe die Antwort gepostet. –

+0

das ist richtig, ich habe das @ type-Attribut auf dem HTML nicht gesehen. –

+0

Verwenden von JavaScript Executor Ich bin in der Lage, das Optionsfeld auszuwählen, aber die Option wird nicht im Back-End rendern, was es mir nicht erlaubt, von dieser Seite zu bewegen! @Satish: Ich habe auch gewartet. – Joe

1

Das Warten auf Element vor der Ausführung des Javascript löste das Problem. Hier ist der Arbeits Code für beide mit Hilfe von Javascript und ohne Javascript (mit webelement Klick):

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

Mit WebElement Methode:

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