我在解决以下调用链的Selenium语义时遇到了问题。
WebElement row = driver.findElement(MyBy.tableRowContent("Selenium"));
WebElement editIcon = row.findElement(By.xpath("//span[@title='Edit']"));
我想在WebElement上调用findElement时,查询将缩小到祖先文档(我上一个例子中的行)。使用Xpath时,这似乎不是标准机制。之前的调用是使用整个DOM而不是给定的祖先。
如果我想缩小对WebElement行的第二次调用,我必须修改xpath查询,如下所示(注意查询开头的点):
WebElement editIcon = row.findElement(MyBy.xpath(".//span[@title='Edit']"));
为了进行比较,使用css选择器时,以下工作正常:
WebElement row = driver.findElement(MyBy.tableRowContent("Selenium"));
WebElement editIcon = row.findElement(MyBy.cssSelector("span[title='Edit']"));
这是预期的行为还是By.xpath实施的问题?
答案 0 :(得分:2)
这是预期(并且令人困惑)的行为 - 表达式开头的点使搜索上下文特定 - 没有dot XPath表达式是“绝对”并且搜索将被启动来自DOM树的根元素。
但是,是的,这有时候确实令人困惑,因为在特定元素上调用“find element by xpath”时,很难想到为什么要从根执行搜索的原因。这是一个相关的问题,有一些好处: