你可以将WebElement转换为WebDriver吗?

时间:2015-02-09 15:31:49

标签: 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"));
}

而不是像这样的东西

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"));
   }
}

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

3 个答案:

答案 0 :(得分:1)

不,wkhtmltopdf --post BYPASS yes --cookie sessionid $sessionID ... WebElement不是彼此的后代。

如果您的WebDriver恰好是IWebElement,那么您可以使用

获取RemoteWebElement
IWebDriver

答案 1 :(得分:1)

使用OpenQA.Selenium.Support.UI;

如果元素是 ISearchContext IWebElement

的类型

然后这个演员为我工作

var driver =((IWrapsDriver)element).WrappedDriver;

答案 2 :(得分:0)

如果您只需要使用“root”查找其下的元素而不是执行其他WebDriver特定内容(例如导航或管理选项或超时),则可以使用SearchContext代替WebDriver

您的代码如下所示:

WebDriver chromeDriver = new ChromeDriver();
SearchContext driver = chromeDriver; // Use SearchContext instead of WebDriver

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

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

我在自己的项目中注意到,我经常有方法期望类型为WebDriver的参数,而实际上它只在其上调用findElements。通过将类型更改为SearchContext,我的实用程序变得更加灵活。

public WebElement findMyElement(SearchContext webDriver) {
    return webDriver.findElement(By.xpath("PATH"));
}

像这样使用:

WebDriver webDriver = new ChromeDriver();
WebElement customElement = findMyElement(webDriver);
WebElement nestedElement = findMyElement(customElement);