Java 如何找到特定WebElement的子元素(我不知道xpath)
我有任意数量的具有唯一类名的磁贴。其中一个有一个独特的标题,所以我正试图抓住这一个明确。一旦我这样做了,我希望在它的结构中有一个对子元素的引用 tile.findElement()的“tile.”部分在这里对我有用吗?我想专门使用相对于平铺的xpath。Java 如何找到特定WebElement的子元素(我不知道xpath),java,selenium,xpath,selenium-webdriver,Java,Selenium,Xpath,Selenium Webdriver,我有任意数量的具有唯一类名的磁贴。其中一个有一个独特的标题,所以我正试图抓住这一个明确。一旦我这样做了,我希望在它的结构中有一个对子元素的引用 tile.findElement()的“tile.”部分在这里对我有用吗?我想专门使用相对于平铺的xpath。 public WebElement getArticleTileByTitle(String title){ By xpath = By.xpath(".//div[contains(., '" + title + "') or
public WebElement getArticleTileByTitle(String title){
By xpath = By.xpath(".//div[contains(., '" + title + "') or @title='" + title + "']");
List<WebElement> tiles = findPresentElements(By.className("articleTile"));
for(WebElement tile : tiles){
if(isElementPresent(tile, xpath))
return tile;
}
return null;
}
public boolean articleTileImageIsVisible(WebElement tile){
WebElement background = tile.findElement(By.xpath("/*[2]/*[2]/*[1]/*[3]")); //This throws NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"/*[2]/*[2]/*[1]/*[3]"}
//figure out stuff about background
}
尽管如此,我还是不断得到关于NoSuchElementException的变体:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/[2]/[2]/[1]/[3]”},而这不是有效的xpath
这个问题与findelelements()非常相似,但人们似乎误解了它,或者我的用例不同。forfindelelements()
说:
使用xpath时,请注意webdriver遵循标准约定:前缀为“/”的搜索将搜索整个文档,而不仅仅是当前节点的子节点。使用“//”将搜索限制在此Web元素的子级
因此,您应该能够执行以下操作:
WebElement foo = driver.findElement(By.xpath("//*[@title='" + title + "']"));
WebElement bar = foo.findElement(By.xpath(".//img"));
第二个xpath中的前导点起到了很大的作用,因为它将只搜索
foo
的子元素。您是否使用“tiles”来表示其他内容,或者只是将其用作获取子元素的垫脚石?顺便说一句,您试图用来获取子元素的XPath非常可怕。这种风格肯定会被破坏,并且很难调试。如果你发布一个html的例子,我相信我们会为你想出更好的方法。这个网站的URL是什么?
WebElement foo = driver.findElement(By.xpath("//*[@title='" + title + "']"));
WebElement bar = foo.findElement(By.xpath(".//img"));