web-dev-qa-db-fra.com

L'événement click sélénium ne déclenche pas angularjs ng-click

J'ai cette page où il y a une zone de texte et il y a un bouton de sauvegarde associé à chaque zone de texte. J'ai besoin de cliquer sur le bouton Enregistrer pour qu'il enregistre la valeur dans la zone de texte. Il travaille manuellement et utilise Selenium. Mais lorsque vous utilisez Selenium WebDriver, vous ne sauvegardez pas la valeur de la zone de texte. Mais il n’ya pas d’exception d’erreur levée. L'entrée, le clic fonctionne . Savetextvalue () n'est pas déclenché en bref . Il existe un problème similaire L'événement clic Selenium ne déclenche pas l'événement angularjs

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

Il existe plusieurs zones de texte et le bouton d’enregistrement associé. En fonction de la 'valeur de configuration' (vous pouvez voir en haut), la valeur est enregistrée. 

9
manutd

Remplacez le localisateur à votre convenance

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

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

OR

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

OR

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

J'espère que ça vous aidera :)

Contactez-moi si le problème persiste :)

6
Shubham Jain
driver = webdriver.Chrome('/path to /webdriver 22');
driver.find_element_by_css_selector('button[ng-click="func()"]');
3
ayoub laaziz

Dans Selenium IDE, essayez:

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

idem avec Webdriver: 

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

Essayez de mettre wait entre vos actions car Selenium ne sait pas comment les charges angulaires fonctionnent. Protractor a été créé dans le but de gérer des pages Web angulaires, qui recouvrent le WebDriver Selenium. Cependant, si vous souhaitez toujours tester des angularjs avec Selenium , attendre quelques secondes implicitement ou bien attendre entre chaque action devrait vous aider à répondre à vos besoins et à réaliser vos objectifs. J'espère que ça aide.

2
Girish Sortur

Le même problème se produit lorsqu’on utilise Séléniure sur Sélénium. J'ai trouvé une solution de contournement avec Selenide, si c'est une option pour vous:

Après avoir trouvé l'élément cliquable, utilisez pressEnter () de Selenide au lieu de click ().

element.should(exist).pressEnter();
0
Guy Stevens