您可以将 WebElement 转换为 WebDriver 吗?

use*_*846 5 java selenium

我想使用 WebElement 作为根来查找元素而不是驱动程序。我知道这是可能的,因为 WebElement 和 WebDriver 都扩展了 SearchContext 类。但我希望能够进行像这样的搜索。

WebDriver chromeDriver = new ChromeDriver();
WebDriver driver = chromeDriver;

// Set a new search root
public void setSearchRoot(){
    if(i want a element as a root){
      this.driver = (WebDriver)this.driver.findElement(By.xpath("PATH"));
    }else{
      this.driver = chromeDriver;
    }
}

//find a element
public void findMyElement(){
   this.driver.findElement(By.xpath("PATH"));
}
Run Code Online (Sandbox Code Playgroud)

而不是这样的东西

WebDriver driver = new ChromeDriver();
WebDriver rootElement = this.driver.findElement(By.xpath("PATH"));

//find a element
public void findMyElement(){
   if(i want a element as a root){         
     this.rootElement.findElement(By.xpath("PATH"));
   }else{
     this.driver.findElement(By.xpath("PATH"));
   }
}
Run Code Online (Sandbox Code Playgroud)

它可能看起来有点混乱,但基本上我希望能够将 WebElement 而不是 WebDriver 设置为起点,而不必在每次想要获取元素时执行 if 语句或使用两种不同的方法。因为有时我想使用 WebDriver 作为根,有时想使用 Webelement,而无需使用 get 代码更改任何内容。有可能吗?是的,我知道这可能不是最佳实践,只是想知道这是否可能。

And*_*dén 1

不,WebElement并且WebDriver不是彼此的后代。

如果您IWebElement恰好是 a ,那么您RemoteWebElement可以获得IWebDriver

var remoteElement = (RemoteWebElement)element;
var webDriver = remoteElement.WrappedDriver;
Run Code Online (Sandbox Code Playgroud)