我正在使用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是一个无法访问的属性
尝试:
(driver) findElement(By.xpath("//*[contains(local-name(), 'input') and contains(@name, 'qty')]")).sendKeys("100");
回答@rrd的评论:说实话,我不知道为什么OP使用((Webdriver imgtags.get(i))。我不知道那是什么。通常,我只使用driver.findElement [.. ]
希望他知道在他的框架中有什么用处:D
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()更好。这将在未来的某个时刻引起您的问题。