我想使用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代码更改任何内容。有可能吗?是的,我知道这可能不是最好的做法,只是想知道它是否可能。
答案 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);