2015-09-10 12 views
7

Ho questa pagina in cui è presente una casella di testo e c'è un pulsante di salvataggio associato a ciascuna casella di testo. Devo fare clic sul pulsante Salva in modo che salvi il valore nella casella di testo. Funziona manualmente e utilizza il selenio. Ma quando si esegue Selenium WebDriver non si salva il valore della casella di testo. Ma non vi è alcuna eccezione di errore generata. Input, Click funziona. savetextvalue() non è attivato in breve. C'è problema analogo Selenium click event does not trigger angularjs eventL'evento click selenio non viene attivato angularjs ng-click

<pp-save-control fn-save-text="saveText();" btn-class="btn btn-default btn-mtl" button-id="btnkbaemailauthsub" place-holder-text="" input-class="tb-mtl" input-id="txtkbaemailauthsub" config-name="40" title-text="KBA email authentication subject" outer-container-class="div-mtl-header" class="ng-isolate-scope"><div class="div-mtl-header"> 
    <span class="label-mtl ng-binding">KBA email authentication subject</span><img ng-hide="(isHelpHidden != null &amp;&amp; isHelpHidden != 'true') ? false : true" class="help-mtl ng-hide" src="/Images/help.png"> 
    <div class="div-mtl-tb-holder"> 
     <input type="text" placeholder="" class="tb-mtl" name="txtkbaemailauthsub" id="txtkbaemailauthsub"> 
     <button ng-click="saveTextValue();" ng-hide="false" class="btn btn-default btn-mtl btn-mtl-alignment" name="btnkbaemailauthsub" id="btnkbaemailauthsub" type="button">save</button> 
    </div> 
</div> 
</pp-save-control> 

Ci sono casella di testo multiple e associato pulsante Salva. A seconda del valore 'config-value' (Puoi vedere in alto) viene salvato.

+0

Avete provato con JavascriptExecutor. prova con esso o condividi l'id univoco o xpath del pulsante che aiuterà –

+0

Provato anche con JavascriptExecutor. – manutd

risposta

4

Sostituire il localizzatore secondo la vostra convenienza

WebElement element= driver.findElement(By.id("btnkbaemailauthsub")); 

JavascriptExecutor executor = (JavascriptExecutor) driver; 
executor.executeScript("arguments[0].click();", element); 

O

JavascriptLibrary jsLib = new JavascriptLibrary(); 
jsLib.callEmbeddedSelenium(driver,"triggerMouseEventAt", element,"click", "0,0"); 

O

WebElement element= driver.findElement(By.id("btnkbaemailauthsub")); 
// Configure the Action 
Actions action = new Actions(driver); 

//Focus to element 
action.moveToElement(element).perform(); 

// To click on the element 
action.moveToElement(element).click().perform(); 

Spero che vi aiuterà :)

tornare a me se ancora problema:)

+1

Grazie per la risposta. Ho provato questo. Non funzionava – manutd

+0

Ho aggiornato per risposta. provare con la seconda opzione JavascriptLibrary –

+0

Non ha funzionato :(Le coordinate sono relative all'elemento Web giusto ?. Non alla pagina Web? – manutd

1

Prova a mettere in wait tra le tue azioni perché il selenio non sa come angolare carica e funziona. Il goniometro è stato creato con lo scopo di gestire pagine web angolari, che è un wrapper su un webdriver di selenio. Tuttavia, se si desidera ancora test angularjs with Selenium attendere alcuni secondi di attesa implicita o fluente tra ogni azione dovrebbe essere d'aiuto per le proprie necessità e realizzare ciò che si intende fare. Spero che sia d'aiuto.

+0

+1 per questa risposta. Non ho optato per la soluzione Javascript, poiché non replica l'effettivo input dell'utente.Inoltre, non ho potuto usare il selettore css '' [ng-click = "func()"] ''dato che mi avrebbe dato più di 1 risultato. Anche le attese esplicite non erano sufficienti. La mia attuale soluzione sta aggiungendo un'attesa implicita di 1 secondo. Tuttavia mi chiedo se questo possa essere ridotto al minimo. – Thibstars

2

di selenio IDE prova:

<td>sendKeysAndWait</td> 
<td>id=mybutton</td> 
<td>${KEY_ENTER}</td> 

stesso con WebDriver:

WebElement element_p = (new WebDriverWait(_driver, 3)) 
      .until(ExpectedConditions.visibilityOfElementLocated(By 
        .id("myButton"))); 
element_p.sendKeys(Keys.RETURN); 
+0

Brillante! L'invio della chiave effettiva all'elemento l'ha risolto. – Maritim

1
driver = webdriver.Chrome('/path to /webdriver 22'); 
driver.find_element_by_css_selector('button[ng-click="func()"]'); 
Problemi correlati