KarateDSL UI测试-友好定位器不工作



继我最近提出的另一个问题之后,你们能帮我找出我编写"下面"友好定位器的方式有什么问题吗?提前谢谢!

Scenario: Get UI - Download
Given url 'https://test01/v1/doc/env/
And headers headers1
When method get
Then status 200
* def env = response.url
Given driver env
And click('{button}Proceed')
And click('{span}Start')
And click('{span}Required - GSA)
And click('{span}Required - GSB')
And click('{span}Required - GSC')
And click('{span}Required - GSD')
And click('{span}Required - GSE')
And click('{span}Required - GSF')
And click('{span}Required - GSG')
And click('{span}Required - GSH')
* below('{}Required - GSH').input('karate dsl')

我有一个文本区域,我希望输入值,但友好的定位器"下面"不适合我。

javascript evaluation failed: below('{}Required - GSH').input('karate dsl'), unable to find: {}Required - GSH, BELOW, INPUT

更新:以下是HTML:的片段

我需要首先选择的单选按钮,因此文本区域将被启用/需要

<div class="doc-tab radio-tab  signing-required       use-olive" id="tab-c6cfbed8-694a-4004-9294-cc0195bab1d0" data-id="c6cfbed8-694a-4004-9294-cc0195bab1d0" data-type="Radio" data-label="FINQ1_66c4593b-7d61-43b5-985f-a22e0909d3dd_b6c1ea40-7291-4ee8-b682-cd770a1bfef8" style="left:61.44px; top:421.76px;">
<div class="rb">
<input type="radio" id="tab-form-element-c6cfbed8-694a-4004-9294-cc0195bab1d0" aria-invalid="false" name="FINQ1_66c4593b-7d61-43b5-985f-a22e0909d3dd_b6c1ea40-7291-4ee8-b682-cd770a1bfef8" class="rb_input main-radio-tab-input" value="tab.id" data-qa="radio-tab-c6cfbed8-694a-4004-9294-cc0195bab1d0">
<label for="tab-form-element-c6cfbed8-694a-4004-9294-cc0195bab1d0" class="rb_label" data-qa="radio-tab-label-c6cfbed8-694a-4004-9294-cc0195bab1d0"><span class="tab-label" style="white-space: nowrap; width: auto;">Required - GSG</span></label>
</div>
</div>
<div class="doc-tab radio-tab signed signing-required       use-olive" id="tab-d05ca57f-06a7-4f2f-a297-da01dc93290a" data-id="d05ca57f-06a7-4f2f-a297-da01dc93290a" data-type="Radio" data-label="FINQ1_66c4593b-7d61-43b5-985f-a22e0909d3dd_b6c1ea40-7291-4ee8-b682-cd770a1bfef8" style="left:61.44px; top:446.08px;">
<div class="rb">
<input type="radio" id="tab-form-element-d05ca57f-06a7-4f2f-a297-da01dc93290a" aria-invalid="false" name="FINQ1_66c4593b-7d61-43b5-985f-a22e0909d3dd_b6c1ea40-7291-4ee8-b682-cd770a1bfef8" class="rb_input main-radio-tab-input" value="tab.id" checked="" data-qa="radio-tab-d05ca57f-06a7-4f2f-a297-da01dc93290a">
<label for="tab-form-element-d05ca57f-06a7-4f2f-a297-da01dc93290a" class="rb_label" data-qa="radio-tab-label-d05ca57f-06a7-4f2f-a297-da01dc93290a"><span class="tab-label" style="white-space: nowrap; width: auto;">Required - GSH</span></label>
</div>
</div>
<div class="doc-tab text-tab  signing-required has-tab-error" id="tab-3c020567-3db9-449b-bed5-c44b32a236fa" data-id="3c020567-3db9-449b-bed5-c44b32a236fa" data-type="Text" data-label="FINQues1_1_comments_Text_66c4593b-7d61-43b5-985f-a22e0909d3dd_b6c1ea40-7291-4ee8-b682-cd770a1bfef8" style="left:56.32px; top:503.04px;">

这是我想使用"下方"友好定位器定位的文本区域。

<div class="doc-tab text-tab  signing-required         has-tab-error" id="tab-3c020567-3db9-449b-bed5-c44b32a236fa" data-id="3c020567-3db9-449b-bed5-c44b32a236fa" data-type="Text" data-label="myQues1_1_comments_Text_66c4593b-7d61-43b5-985f-a22e0909d3dd_b6c1ea40-7291-4ee8-b682-cd770a1bfef8" style="left:56.32px; top:503.04px;">
 
    <div id="tab-sizer-3c020567-3db9-449b-bed5-c44b32a236fa" class="tab-form-element signing-required tab-sizer multiline" style="width: 676px; font-family: &quot;Lucida Console&quot;, &quot;Andale Mono&quot;, Monaco, monospace; font-size: 12.16px; letter-spacing: 0.14px; color: rgb(0, 0, 0); line-height: 14px; text-align: left; height: auto; min-height: auto; white-space: pre-wrap;"></div>
 
    <textarea id="tab-form-element-3c020567-3db9-449b-bed5-c44b32a236fa" aria-invalid="false" title="" data-qa="text-multi-input-tab-3c020567-3db9-449b-bed5-c44b32a236fa" class="main-text-tab-input tab-form-element signing-required " maxlength="450" style="width: 676px; font-family: &quot;Lucida Console&quot;, &quot;Andale Mono&quot;, Monaco, monospace; letter-spacing: 0.14px; color: rgb(0, 0, 0); line-height: 14px; text-align: left; font-size: 12.16px !important; height: 98px;"></textarea>
 
    <label for="tab-form-element-3c020567-3db9-449b-bed5-c44b32a236fa" class="tab-label" style="white-space: nowrap; width: auto;">Required<span class="tab-error-message" aria-live="polite"></span></label>
</div>

只是猜测,试试这个:

* below('{}Required - GSH').find('textarea').input('karate dsl')

如果不是"默认"input,则需要此项,请参阅文档:https://github.com/intuit/karate/tree/master/karate-core#friendly-定位器

编辑:以下内容适用于0.9.6.RC2 版本中的用例

* def list = locateAll('div[data-label]')
* def condition = function(x){ var label = x.script("_.getAttribute('data-label')"); return label.startsWith('myQues1_2') }
* def found = karate.filter(list, condition)
* found[0].locate('textarea').input('karate dsl')

这有点棘手,但请参阅每个API的文档来了解发生了什么

我已经打开了一个功能请求,让这变得更容易,可以在那里发表评论或提出更多更改:https://github.com/intuit/karate/issues/1123

最新更新