2015-02-09 189 views
0

我想使用WebElement作爲根來代替驅動程序查找元素。我知道這是可能的,因爲WebElement和WebDriver都擴展了SearchContext類。但我希望能夠有一個像這樣的搜索。您可以將WebElement轉換爲WebDriver嗎?

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的,而不必如果要做一個聲明或有兩種不同的方法,只要我想要一個元素。因爲有時我想使用WebDriver作爲根,有時也使用Webelement,而不必使用get代碼改變任何內容。以某種方式可能嗎?是的,我知道這可能不是最佳實踐,只是想知道是否有可能。

回答

0

不,WebElementWebDriver不是彼此的後代。

如果您IWebElement恰好是一個RemoteWebElement,那麼你就可以得到IWebDriver

var remoteElement = (RemoteWebElement)element; 
var webDriver = remoteElement.WrappedDriver; 
0

使用OpenQA.Selenium.Support.UI;

如果元件是一種類型的ISearchContextIWebElement

然後此流延爲我工作

VAR驅動=((IWrapsDriver)元件).WrappedDriver;

0

如果你只需要使用「根」找到下它的元素,而不是做其他的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); 
相關問題