web-dev-qa-db-ja.com

Seleniumクリックイベントがangularjs ng-clickをトリガーしない

このページにはテキストボックスがあり、各テキストボックスに保存ボタンが関連付けられています。保存ボタンをクリックして、テキストボックスに値を保存する必要があります。手動で動作し、Seleniumを使用しています。しかし、Selenium WebDriverを介して実行すると、テキストボックスの値が保存されません。ただし、スローされるエラー例外はありません。入力、クリックは機能しています。つまり、savetextvalue()はトリガーされません。同様の問題があります Seleniumクリックイベントが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>

複数のテキストボックスと関連する保存ボタンがあります。 'config-value'(上部に表示されます)に応じて、値が保存されます。

9
manutd

必要に応じてロケーターを交換してください

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

それがあなたを助けることを願っています:)

それでも問題が解決しない場合は、私に連絡してください:)

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

SeleniumでIDE試す:

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

webdriverと同じ:

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

Seleniumはangularがロードして機能する方法を認識していないため、アクションの間にwaitを挿入してみてください。分度器は、angular Webページ、これはSelenium Webdriverのラッパーです。ただし、 Seleniumでangularjsをテストする したい場合は、暗黙的に数秒間待機するか、各アクション間で滑らかな待機を行うことで、ニーズを満たし、それが役に立てば幸いです。

2
Girish Sortur

セレンを介してセレン化物を使用する場合にも同じ問題が発生します。私がSelenideを使用する回避策を見つけた場合、それがオプションである場合:

クリック可能な要素を見つけたら、click()の代わりにSelenideのpressEnter()を使用します。

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