使用包含文本的css链接元素并访问关联的字段

时间:2016-07-06 15:02:09

标签: selenium-webdriver css-selectors protractor chaining

我需要访问以下html中的输入字段。设置页面的方式我需要使用'地址行1'进行链接。文本,然后将文本发送到输入字段。输入字段ID会发生变化,因此根据用户偏好不会改变字段的布局。我在挣扎。如果您需要更多信息,请随时询问我不想重载太多信息。



<td class="labelCol requiredInput">
  <label for="00N36000000xina"><span class="assistiveText">*</span>Address Line 1</label>
</td>
<td class="dataCol col02">
  <div class="requiredInput">
    <div class="requiredBlock"></div>
    <input id="00N36000000xina" maxlength="255" name="00N36000000xina" size="20" tabindex="4" type="text">
  </div>
</td>
&#13;
&#13;
&#13;

我这样访问过:

element(by.css('div.pbSubsection:nth-child(3) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > input'))

但是,根据用户放置字段的位置,它可以移动。所以我希望能够访问标签\并使用它来查明其输入字段。

3 个答案:

答案 0 :(得分:2)

我不知道量角器,但我拼凑了一些希望能够工作或接近的代码,我会给你思考过程和一些信息,希望你能用它来修复我的代码,如果需要,并解决问题。

首先通过XPath "//label[text()='Address Line 1']"查找元素。这将搜索包含&#34;地址行1和#34;的LABEL标记。找到该元素后,获取label属性。在您的HTML中,此label是您想要的id元素的INPUT。现在使用id查找元素,并根据需要使用它。

id = element(by.xpath("//label[text()='Address Line 1']")).getAttribute("label")
input = element(by.id(id))
input.sendkeys("some text")

答案 1 :(得分:1)

我自己没有测试过,但你可以尝试这样的事情:

// $ is shorthand for element(by.css())
$('div.assistiveText').getAttribute('for').then(function (val) {

    // locate the <input> by the value of the attribute on <label>
    element(by.id(val)).sendKeys('abc'); // replace sendKeys with your intended function

});

或者,如果标签上的第一个定位器不够具体,请替换$('div.assistiveText') element(by.cssContainingText('Address Line 1'))

我尝试了其他属性(我的应用中的任何地方都没有for属性),它似乎对我有效。

答案 2 :(得分:0)

试试这个:

        List<WebElement> elementList = driver.findElements(By.cssSelector("tbody > tr"));
        for (WebElement element : elementList) {
            if(element.findElement(By.cssSelector("td.labelCol > label")).getText().equalsIgnoreCase("Address Line 1")) {
                element.findElement(By.cssSelector("input[type='text']")).sendKeys("textToInput");
            }
        }