如何从selenium webdriver中java中的重复标记中选择一个

问题描述 投票:0回答:2

我正在使用Selenium WebDriver,我在页面上有多个项目,页面上的每个项目都是单独的表单类型。

我已将所有这些表单元素保存在列表中,并且我正在迭代每个项目以尝试使用“alt”属性获取元素的名称。

但是当我尝试从input元素获取“name”属性时,它总是返回在该页面上找到的第一个输入标记,而不是我当前选择的元素的name属性。

我使用的语法是:

((Webdriver imgtags.get(i)).findelement(By.xpath("//input[@name='qty']")).sendKeys ("100");

我还尝试使用以下方法从标记中获取id:

((Webdriver imgtags.get(i)).getAttribute("id");

它返回一个空值,但它应返回该输入标记中id属性的值。

我也尝试使用.bytagname获取id,但因为id是一个无法访问的属性

selenium selenium-webdriver
2个回答
1
投票

尝试:

(driver) findElement(By.xpath("//*[contains(local-name(), 'input') and contains(@name, 'qty')]")).sendKeys("100");

回答@rrd的评论:说实话,我不知道为什么OP使用((Webdriver imgtags.get(i))。我不知道那是什么。通常,我只使用driver.findElement [.. ]

希望他知道在他的框架中有什么用处:D


-1
投票

Selenium Xpath处理不完全符合,它并不总是将//视为后代或自我的同义词。

而是尝试调整代码以使用以下Xpath:

 ((Webdriver imgtags.get(i)).findElement(By.xpath("./descendant-or-self::input[@name='qty']")).sendKeys("100");

这将使您的搜索基于当前选定的WebElement,然后查找具有值为“qty”的name属性的任何后代。

我还建议将imgtags数组存储为WebElement数组,例如

List<WebElement> imgtags = new ArrayList<>();

这比向WebDriver转换为能够使用.findElement()更好。这将在未来的某个时刻引起您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.