代码之家  ›  专栏  ›  技术社区  ›  PackersFan

检查Geb中的只读

  •  1
  • PackersFan  · 技术社区  · 6 年前

    我正在尝试用Geb编写一个测试,它有一系列不同的文本字段。该场景本质上是有五到六个html输入,用户一次只能输入其中一个。也就是说,如果第一个文本框有一个值,其余的文本框应该是不可变的。

    元素没有输入类型=“disabled”,而是有一个属性(我假设它是一个属性?)的只读。

    以下是一个通用示例:

    <input aria-labelledby="Date Input Value 1" id="Date Input 1" name="Date Input 1" class="input-small DateOrEmpty dateInput" value="" style="display: inline-block;" readonly="">
    

    我试过了

    ${"input", id: "Date Input 1"}.@readonly 
    

    以及

    ${"input", id: "Date Input 1"}.has("readonly")
    

    我运气不太好。。

    2 回复  |  直到 6 年前
        1
  •  3
  •   erdi    6 年前

    而不是必须面对这样一个事实 readonly 属性将导致元素为只读,但 $("input[id='Date Input 1']").@readonly 计算结果为a 虚假的 值(as @readonly 返回属性的值,该属性在您的情况下是一个空字符串)为什么不将导航器转换为 FormElement module 并使用 isReadOnly() 它提供的属性方法?

    $("input[id='Date Input 1']").module(FormElement).readOnly
    

    编辑 正如kriegaex所指出的, $(“输入[id=”日期输入1“])@只读 实际计算结果为 真实的 值(因为WebDriver总是返回包含 true 当获得 只读 属性,只要该属性是在元素上定义的,而不考虑该属性的实际值)。

    上述内容意味着:

    $(“输入[id=”日期输入1“])。模块(FormElement)。只读
    

    以及:

    $("input[id='Date Input 1']").@readonly
    

    它们的等效性在于 真实的 价值

        2
  •  2
  •   kriegaex    6 年前

    这里有几个问题:

    • 将HTML ID与内联空格一起使用。这实际上不是合法的名称,因此更难编写简单的CSS选择器,如 #my-id 为了他们。
    • 选择器的Geb语法使用括号,而不是大括号。花括号用于闭包,这是一种完全不同的野兽。
    • 请注意,根据 HTML specification 这个 readonly 属性为布尔值,如果它存在,则始终为true,即通常不写入 readonly="something" 但只是 只读 .即使你写信 readonly="false" 它将计算为true,因为忽略其值,只检查其存在性。

    因此,如果您有以下HTML代码:

    <input id="Date Input 1" readonly>
    <input id="Date Input 2">
    <input id="date-input-3" readonly="false">
    <input id="date-input-4">
    <input id="date-input-5" readonly="">
    

    您可以在Geb测试中编写这些选择器(请注意,在IDs中不使用空格会使选择器更简单):

    $("input[id='Date Input 1']").@readonly
    !$("input[id='Date Input 2']").@readonly
    $("input#date-input-3").@readonly
    !$("input#date-input-4").@readonly
    $("input#date-input-5").@readonly