我想将文本插入文件中。此文件xpath = "//*[@id='email']"
。
此XPath将移动到网页中的2个位置。第一个是不可见的,第二个是OK。我想在第二个插入文本。我是这样做的:
String xpathOfElement = "//*[@id='email']";
List<WebElement> a = driver.findElements(By.xpath(xpathOfElement));
a.get(1).sendKeys("hhh");
我收到了以下错误消息:
java.lang.IndexOutOfBoundsException:Index:1,Size:1
答案 0 :(得分:0)
@libi是的,如果你能提供url我可以帮你写xpath。您可能需要查看 Xpath Cheat Sheet 。
我的建议是包含父/兄弟,以使您的xpath 唯一。例如,
<!DOCTYPE html>
<html>
<body>
<div class="email">
E-mail:
<input type="email" name="email">
<input type="submit">
</div>
<br>
<div class="email2">
E-mail 2:
<input type="email" name="email2">
<input type="submit">
</div>
</body>
</html>
电子邮件的Xpath: //div[@class="email"]/input[@type="email"]
电子邮件2的Xpath: //div[@class="email2"]/input[@type="email"]
答案 1 :(得分:0)
根据您在问题中提供的详细信息,您在下面观察到的错误非常正确:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
正如您所提到的This XPath is moved to 2 places in the web page. The first is not visible and the second is OK. I want to insert text to the second.
,所以只要您:
String xpathOfElement = "//*[@id='email']";
List<WebElement> a = driver.findElements(By.xpath(xpathOfElement));
只有你提到的第二个元素存储在 List a
中。由于第一个元素不可见 Selenium
无法在 {{中识别出公开 1}} 即可。因此, DOM Tree
将包含一个List<WebElement> a
:
WebElement
所以,接下来当你尝试:
[[[FirefoxDriver: firefox on XP (52a50170-91f5-4211-ae81-a72f0d863714)] -> xpath: //*[@id='email']]]
a.get(1).sendKeys("hhh");
是指a.get(1)
中的第二个元素,该位置既未初始化也未包含任何值。因此,您看到:
List
简单的解决方案是为可见(java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
)元素构建唯一的逻辑css
或xpath
。要实现 OK
是不够的。您必须遍历String xpathOfElement = "//*[@id='email']";
并找到父节点并构造唯一的DOM
并按以下步骤操作:
xpath
另一种方式是您尝试的方式,而不是String unique_xpathOfElement = "//*[@id='email']";
driver.findElement(By.xpath(unique_xpathOfElement)).sendKeys("hhh");
1 ,您必须 index
{{1} } 0 如下:
get()