2015-09-10 24 views
7

Ich habe diese Seite, wo es ein Textfeld gibt und es gibt Speichern-Schaltfläche mit jedem Textfeld zugeordnet. Ich muss auf die Schaltfläche Speichern klicken, damit der Wert im Textfeld gespeichert wird. Es arbeitet manuell und mit Selen. Aber wenn Selenium WebDriver ausgeführt wird, wird der Textfeldwert nicht gespeichert. Es wird jedoch keine Fehlerausnahme ausgelöst. Eingabe, klicken funktioniert. savetextvalue() wird nicht kurz ausgelöst. Es ist ähnlich Ausgabe Selenium click event does not trigger angularjs eventSelenium Click Event löst nicht 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> 

Es mehr Textfeld und Schaltfläche Speicher verbunden. Abhängig vom 'config-value' (Sie können oben sehen) wird der Wert gespeichert.

+0

haben Sie mit JavascriptExecutor versuchen. versuchen Sie es oder teilen Sie die Taste eindeutige ID oder XPath wird es helfen –

+0

mit JavascriptExecutor auch versucht. – manutd

Antwort

4

Ersetzen Sie den Locator nach Ihrer Bequemlichkeit

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

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

ODER

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

ODER

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

Hoffe, dass es Ihnen helfen :)

mir zurück, wenn immer noch ein Problem:)

+1

Danke für die Antwort. Habe diesen hier ausprobiert. Es hat nicht funktioniert. – manutd

+0

Ich habe durch Antwort aktualisiert. versuchen, mit der 2. Option JavascriptLibrary –

+0

Es hat nicht funktioniert :(Koordinaten ist direkt an dem Web-Elemente jeweilige ?. nicht auf die Webseite? – manutd

1

Versuchen Sie wait zwischen Ihren Aktionen, weil Selen nicht weiß, wie kantige Lasten und funktioniert. Der Winkelmesser wurde zum Zweck der Handhabung winkliger Webseiten erstellt, die ein Wrapper über Selen-Webtreiber sind. Allerdings, wenn Sie immer noch wollen test angularjs with Selenium warten einige Sekunden implizit oder fließend warten zwischen jeder Aktion sollte Ihnen mit Ihrem Bedarf helfen und erreichen, was Sie vorhaben. Ich hoffe es hilft.

+0

+1 für diese Antwort. Ich habe mich nicht für die Javascript-Lösung entschieden, da diese keine tatsächlichen Benutzereingaben repliziert.Außerdem konnte ich den css-Selektor ''button [ng-click =" func() "]'' nicht verwenden, da das mir mehr als 1 Ergebnis gegeben hätte. Explizite Wartezeiten waren auch nicht genug. Meine aktuelle Lösung fügt eine Implizit Wartezeit von 1 Sekunde hinzu. Ich frage mich jedoch, ob das auf ein Minimum reduziert werden könnte. – Thibstars

2

In Selenium IDE Versuch:

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

mit WebDriver gleich:

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

Brilliant! Senden des aktuellen Schlüssels an das Element löste es. – Maritim

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