【问题标题】:protractor cannot locate element with css on ng-click element量角器无法在 ng-click 元素上使用 css 定位元素
【发布时间】:2015-03-11 09:31:40
【问题描述】:

html:

<button class="helperButton ng-scope" ng-if="!isDisabled && displayHelper( 'none' )" ng-click="select( 'none', $event );" type="button">  ×  Select None</button>

试图定位:

element(by.css('button[ng-click="select( \'none\', $event );"]'));

得到错误:

失败:使用定位器找不到元素: By.cssSelector("button[ng-click=\"select('none', $event);\"]")

此链接提供了一个解决方案AngularJS Protractor - Finding an Element on a Page Using Ng-Click Binding,但没有详细说明其引用的函数。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript angularjs testing css-selectors protractor


    【解决方案1】:

    基于ng-click 的定位器不太可靠和可读。

    相反,我会依赖按钮文本

    by.xpath('//button[contains(., "Select None")]')
    

    或者,在上:

    by.css('button.helperButton')
    

    或者,如果可以控制应用程序 HTML 模板 - 添加 id 属性并使用:

    by.id('mybuttonid')
    

    如果您仍想使用ng-click - 尝试使用starts-with CSS 选择器语法检查ng-click 属性:

    by.css('button[ng-click^=select]')
    

    【讨论】:

    • 我尝试了按钮文本,但它有那个奇怪的 x 字符和所有导致它不起作用的空格。
    • @awaken 很好,这就是我使用contains() 的原因。奇怪的是你仍然找不到它。页面上有frameiframe 元素吗?谢谢。
    • 该页面有大量符合这些定位方法的元素,我会得到 WARNING - more than one element found for locator By.xpath("//button[contains(., \"Select None\")]") - the first result will be used 这就是我使用 ng-click 的原因
    • @awaken 好吧,如果里面有很多带有Select None 文本的元素——我怀疑ng-click 对他们来说也是一样的。你怎么知道你需要哪一个?谢谢。
    • xpath //*[@id='-search-form']/div[1]/div[4]/div[1]/div[1]/div/span/div/form/div[1]/div[1]/button[2] 有效,但我尽量远离 xpath,因为它们可能很脆弱。
    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 2020-07-05
    • 2016-05-02
    • 2016-08-06
    • 1970-01-01
    • 2015-09-12
    • 2016-04-01
    • 2019-06-26
    相关资源
    最近更新 更多