【问题标题】:Protractor - "More than one element found for locator" when using by.id量角器 - 使用 by.id 时“为定位器找到多个元素”
【发布时间】:2019-06-30 02:35:44
【问题描述】:

我们正在使用 by.id 来引用一个元素,但 Protractor 仍然抛出此消息“为定位器找到多个元素 By(css 选择器,*[id="txt1"])”,它返回的值是使用 getText() 时的标签。这种行为似乎很奇怪。当我们从 Javascript 中引用该元素时,该引用似乎很好。感谢您帮助解决此问题。

//Code in Protractor, it seems to be referring to a label
var txtEl=element(by.id('txt1'));

//Code in VueJS, where the ID is set to each InputText
                   //This is the label
                    <label class="form__label" v-model="form.label" v-show="form.hasOwnProperty('label')">
                        {{ index }}. {{ form.label }}
                    </label>

        <el-input type="text"
                  :id="currentField.id"
                  :placeholder="currentField.isPlaceholderVisible ? currentField.placeholder : ''"
                  v-model="currentField.value">
        </el-input>

//Code in Javascript, works fine, shows the right value
console.log("Value:" + this.$refs.form1["txt1"].value);

【问题讨论】:

  • 看起来渲染的页面不知何故得到了重复的 id。尝试对渲染的页面进行截图,看看页面在运行测试时是否正确。
  • 这是奇怪的部分,页面看起来是正确的,当我们使用 console.log 打印值时(你可以看到那行),正确的值被打印出来了。
  • 添加了 VueJS 代码。 Protractor 正在返回标签的值,甚至不是 InputText。这很奇怪。
  • 你确定标签上没有id="txt1"吗?如果改成element.all(by.id('txt1')),返回多少个元素?
  • 我已将标签代码添加到我的问题中。如您所见,没有为标签设置 ID,并且值“currentfield:id”仅分配给 的 id。

标签: vue.js protractor


【解决方案1】:

此时尝试打印源代码,您将清楚地知道 DOM 中有多少具有相似 id 的元素

【讨论】:

    【解决方案2】:

    试试这个

    element(by.css('input[type = "text"]'))
    

    【讨论】:

    • 但是我们需要验证的是输入的文本。所以这种方法可能没有帮助。有没有办法可以指定字段类型和 id ?
    • 更新答案试试上面的。
    • 如果我在该页面上有 3 个输入文本并且我只需要验证一个文本,这仍然有效吗?如何将其与 ID 结合使用?
    【解决方案3】:

    折腾了10个小时终于找到答案了。

    1. 为 .不要设置“:id”。像这样:name="currentField.id"
    2. 在 Protractor 代码中,使用名称来获取元素。像这样 - var inputtxt=element(by.css("input[name='txt1']"));

    3. 不要使用 getText(),它的行为很奇怪,返回空。使用 inputtxt.getAttribute('value')) 其中“value”是分配给“v-model”的基础字段

    4. 重要 - 通过设置 browser.sleep(x ms) 允许页面完全加载。否则元素会被多次检索,量角器会抛出警告“找到多个元素......”

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2016-01-04
      • 2023-03-28
      • 2015-09-12
      • 2014-06-09
      • 2016-05-02
      相关资源
      最近更新 更多