【问题标题】:Protractor - Can't click on invisible "ng-click" element量角器 - 无法点击不可见的“ng-click”元素
【发布时间】:2026-01-04 17:05:01
【问题描述】:

我有问题元素,我无法通过量角器点击他。

其实前几天用的还不错。

技术细节:

铬 47.0.2526.106 米

量角器 2.0

硒 2.44

CSS

<button class="green-btn font-xs md-button ng-scope md-ink-ripple" type="button" ng-transclude="" ng-click="reply()" ng-disabled="inProgress" translate="conversation.page_action.send" aria-disabled="false">Send<div class="md-ripple-container"></div></button>

测试用例:

it('vCita New App - Conversation - Reply to existing conversation - Message sent', function() {
     browser.wait(EC.visibilityOf(element(by.css('[ng-click="reply()"]'))), 30000);
     element(by.css('[ng-click="reply()"]')).click();
});

错误:

ElementNotVisibleError: element not visible (Session info: chrome=47.0.2526.106) (Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Windows NT 6.3 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 24 milliseconds Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System info: host: 'vCitaQA', ip: '192.168.152.1', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_65' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\Users\idan\AppData\Local\Temp\scoped_dir10416_32044}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, version=47.0.2526.106, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] Session ID: e0c5329c3e1f187094ca7d9f76374c7c at new bot.Error (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\error.js:113:18) at Object.bot.response.checkResponse (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\atoms\response.js:106:9) at c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:377:20 at [object Object].promise.ControlFlow.runInFrame_ (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) at [object Object].promise.Callback_.goog.defineClass.notify (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2464:25) at [object Object].promise.Promise.notify_ (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:563:12) at Array.forEach (native) at Object.goog.array.forEach (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\array\array.js:203:43) at [object Object].promise.Promise.notifyAll_ (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:552:16) at goog.async.run.processWorkQueue (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21) Error at [object Object].ElementArrayFinder.applyAction_ (c:\automation\npm\node_modules\protractor\lib\element.js:403:21) at [object Object].self.(anonymous function) [as click] (c:\automation\npm\node_modules\protractor\lib\element.js:76:19) at [object Object].self.(anonymous function) [as click] (c:\automation\npm\node_modules\protractor\lib\element.js:733:11) at [object Object]. (C:\automation\tests\testCases\newApp\conversationTC.js:30:40) at c:\automation\npm\node_modules\protractor\node_modules\jasminewd\index.js:94:14 at [object Object].promise.ControlFlow.runInFrame_ (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1877:20) at [object Object].promise.ControlFlow.runEventLoop_ (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:1755:8) at [object Object]. (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2056:12) at goog.async.run.processWorkQueue (c:\automation\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21) at runMicrotasksCallback (node.js:337:7) From: Task: Asynchronous test function: it() at [object Object]. (c:\automation\npm\node_modules\protractor\node_modules\jasminewd\index.js:93:33) at [object Object]. (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\async-callback.js:45:37) at [object Object].jasmine.Block.execute (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:1174:17) at [object Object].jasmine.Queue.next_ (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2209:31) at [object Object].jasmine.Queue.start (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2162:8) at [object Object].jasmine.Spec.execute (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2503:14) at [object Object].jasmine.Queue.next_ (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2209:31) at onComplete (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2205:18) at [object Object].jasmine.Spec.finish (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2477:5) at [object Object].onComplete (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2504:10)==== async task ==== Error at [object Object]. (C:\automation\tests\testCases\newApp\conversationTC.js:27:4) at [object Object].jasmine.Env.describe_ (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:913:21) at [object Object].jasmine.Env.describe (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:898:15) at describe (c:\automation\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:658:27) at Object. (C:\automation\tests\testCases\newApp\conversationTC.js:1:63) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12)

【问题讨论】:

  • 你的按钮是不可见的吗?我没有看到它的隐藏属性。量角器总是等到元素可见才能点击它,所以如果你想点击你的不可见元素check this post。您的量角器和 selenium-webdriver 版本也已过时。请更新它们并重试,看看它是否能解决您的问题。谢谢
  • 我现在更新了 npm、量角器、selenium webdriver、chromedriver 和 jdk。但它不能解决这个用例。还有其他想法来处理这个问题吗?谢谢@GirishSortur
  • 你确定没有其他元素有ng-click="reply()"
  • @GirishSortur 你应该把它放在答案中,因为它 100% 正确。
  • 它似乎是此页面中唯一的元素,但登录量角器警告更多..但我已经尝试通过 class & translate 并且它不起作用。 @alecxe

标签: angularjs selenium-webdriver automation jasmine protractor


【解决方案1】:

您确定没有其他元素具有ng-click="reply()"

从所提供页面的源代码来看,确实如此。 ng-click="reply()" 有两个元素,第一个元素被禁用,这意味着你不能与之交互。你需要第二个元素:

$$('[ng-click="reply()"]').last().click();

您还可以改进选择器以匹配按钮栏中的元素:

$('.actions-bar > [ng-click="reply()"]').click();

【讨论】:

  • 非常感谢!你一如既往的才华横溢! @alecxe