C# 何时何地使用按类的FindElement方法

C# 何时何地使用按类的FindElement方法,c#,selenium,webdriver,C#,Selenium,Webdriver,我对Selenium体系结构有基本的了解,其中搜索上下文是由Web驱动程序接口实现的主接口,Web驱动程序接口由各种浏览器驱动程序类扩展。通常,我们在selenium项目中遵循POM,并通过它们的by类定义每个对象- By addButton=By.Id("asdf"); 但我意识到我们甚至可以- addButton.FindElement(By.XPath("ABC"). 但这不会返回类似于driver.FindElement(addButton) 何时使用上述语句?下面使用的是Java

我对Selenium体系结构有基本的了解,其中搜索上下文是由Web驱动程序接口实现的主接口,Web驱动程序接口由各种浏览器驱动程序类扩展。通常,我们在selenium项目中遵循POM,并通过它们的by类定义每个对象-

By addButton=By.Id("asdf");
但我意识到我们甚至可以-

addButton.FindElement(By.XPath("ABC"). 
但这不会返回类似于
driver.FindElement(addButton)

何时使用上述语句?

下面使用的是Java绑定中的术语,但C#绑定也是如此:

弗斯特 @spcial是对的,Selenium中没有定义“By.findElement(By)”。然而,有一个“By.findElement(SearchContext)”定义,我将在下面解释:

SearchContext vs.By 在Selenium中,有一个名为a的接口,然后是类

SearchContext
可以是
WebElement
WebDriver

现在有两个选项可以查找元素(使用伪代码):

1)
SearchContext.findElement(By…)

2)
By.findElement(SearchContext…)

两者都做同样的事情

假设您有一个驱动程序和By变量,如下所示:

WebDriver driver = new FirefoxDriver();
By addButtonLocator = By.id("asdf");
1) "take the driver and search for an element using this By-statement"
现在,您可以通过两种方式找到您的元素:

1)
driver.findElement(addButtonLocator)

2)
addButtonLocator.findElement(驱动程序)

又来了!两者的作用相同,这只是“阅读”这些表达的另一种方式,如下所示:

WebDriver driver = new FirefoxDriver();
By addButtonLocator = By.id("asdf");
1) "take the driver and search for an element using this By-statement"



如前所述,如果使用已识别的元素,则可以使用更小的作用域来代替驱动程序。

是否确定
addButton.FindElement(By.XPath(“ABC”)
是有效的表达式?我使用的是Java,而不是C#,Java不接受这个表达式,因为
By.xpath(“…”
是一个By.class,但是这个语句需要一个
SearchContext
(例如chromedriver),据我所知,这就是我们在Java中使用它的方式-
driver.findElement(addButton)
。当我们试图在关键字驱动的框架中编写泛型函数时,通常使用它。