我需要访问以下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;
我这样访问过:
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'))
但是,根据用户放置字段的位置,它可以移动。所以我希望能够访问标签\并使用它来查明其输入字段。
答案 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");
}
}