2

每个人!我遇到了以下问题:有一些

SearchContext searchContext;
By by;

可以是 WebDriver 或 WebElement。假设它们都已经初始化(我们不知道如何);现在我们想用这样的 xpath 找到元素,似乎做以下

List<WebElement> elements = searchContext.findElements(by);

但是,如果 searchContext 是 WebElement 并且

by = By.xpath("//div");

它行不通!(找不到元素),因为我们需要做

by = By.xpath("./div");

(请参阅在 selenium 中定位 WebElements 的子节点)但是,正如我所提到的,我们对 by 的初始化方式一无所知;

所以,我的问题是:尽管存在上述问题,有没有办法正确找到元素?我有两个变量:by 和 searchContext,我应该在 searchContext 中找到指定的元素。

4

2 回答 2

0

您可以在一些辅助方法中执行此操作,如果发生这种情况将抛出异常

public List<WebElement> returnSearchContext(By by, SearchContext searchContext){
  List<WebElement> elements = searchContext.findElements(by);
  if (elements.getSize()>0){
     return elements;}
   else{
     throw new ElementNotFoundException();
   }
}

我在没有访问任何 IDE 的情况下编写此代码,因此我的示例代码中可能会出现一些错误。例如,我认为异常需要一些参数。但我希望你能明白。

于 2012-08-05T13:26:28.743 回答
0

据我了解,现在有办法做到这一点。唯一的方法是手动正确指定 By.xpath:

By child = By.xpath("/div");
By descendant = By.xpath("//div");

在 WebDriver.isAssignableFrom(searchCONtext.getCLass()) 的情况下,以及

By child = By.xpath("div");
By descendant = By.xpath(".//div");

在 WebElement.isAssignableFrom(searchCONtext.getCLass()) 的情况下。恕我直言,这很糟糕。

于 2012-08-08T06:58:39.243 回答