Java 如何找到特定WebElement的子元素(我不知道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

我有任意数量的具有唯一类名的磁贴。其中一个有一个独特的标题,所以我正试图抓住这一个明确。一旦我这样做了,我希望在它的结构中有一个对子元素的引用

tile.findElement()的“tile.”部分在这里对我有用吗?我想专门使用相对于平铺的xpath。

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()非常相似,但人们似乎误解了它,或者我的用例不同。

for
findelelements()
说:

使用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"));