2015-09-10 17 views
7

Mam tę stronę, gdzie znajduje się pole tekstowe i jest przycisk zapisu związany z każdym polem tekstowym. Muszę kliknąć przycisk zapisu, aby zapisać wartość w polu tekstowym. Działa ręcznie i przy użyciu selenu. Ale podczas uruchamiania przez Selenium WebDriver nie zapisuje wartości pola tekstowego. Ale nie jest zgłaszany wyjątek błędu. Wejście, kliknięcie działa. savetextvalue() nie jest wywoływane w skrócie. Jest podobny problem Selenium click event does not trigger angularjs eventZdarzenie click Selenium nie uruchamia 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> 

Istnieje wiele pole tekstowe i związane Zapisz przycisku. W zależności od "wartości konfiguracyjnej" (widoczna u góry) wartość jest zapisywana.

+0

Próbowałeś z JavascriptExecutor. spróbuj z nim lub podziel się unikalnym identyfikatorem przycisku lub ścieżką xpath. Pomoże to również –

+0

Wypróbowany przy użyciu JavascriptExecutor. – manutd

Odpowiedz

4

Wymień lokalizator zgodnie z wygody

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

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

LUB

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

LUB

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

nadzieję, że pomoże Ci :)

Wracaj do mnie, jeśli nadal stoi problem:)

+1

Dzięki za odpowiedź. Wypróbowałem to. To nie działało. – manutd

+0

Zaktualizowałem przez odpowiedź. spróbuj z drugą opcją JavascriptLibrary –

+0

Nie wyszło :(Współrzędne odnoszą się do elementu webowego right? Nie do strony internetowej? – manutd

1

Spróbuj wstawić wait pomiędzy swoimi działaniami, ponieważ Selenium nie wie, jak narożne obciążenia i działa. Kątomierz został stworzony właśnie w celu obsługi kątowych stron internetowych, które są opakowaniem na selenowym webdriverze. Jeśli jednak nadal chcesz test angularjs with Selenium, czekanie przez kilka sekund bezwarunkowo lub płynne oczekiwanie pomiędzy każdą akcją powinno pomóc ci w potrzebie i osiągnąć to, co zamierzasz. Mam nadzieję, że to pomoże.

+0

+1 za tę odpowiedź. Nie zdecydowałem się na rozwiązanie Javascript, ponieważ nie powiela ono faktycznego wejścia użytkownika.Ponadto nie mogłem użyć przycisku selektora css ''[ng-click =" func() "]", ponieważ dałoby mi to więcej niż 1 wynik. Wyraźne oczekiwania też nie były wystarczające. Moje obecne rozwiązanie polega na dodaniu impulsu wynoszącego 1 sekundę. Zastanawiam się jednak, czy można to ograniczyć do minimum. – Thibstars

2

w selen IDE try:

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

samo Webdriver:

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

Genialny! Przesłanie rzeczywistego klucza do elementu rozwiązało go. – Maritim

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