何时何地使用ByE的FindElement方法

Reu*_*tor 2 c# selenium webdriver

我对Selenium架构有基本的了解,其中Search Context是由Web Driver接口实现的主要接口,由各种浏览器驱动程序类扩展.通常,我们遵循POM来完成我们的selenium项目并通过他们的By类定义每个对象 -

By addButton=By.Id("asdf");
Run Code Online (Sandbox Code Playgroud)

但只是意识到我们甚至可以 -

addButton.FindElement(By.XPath("ABC"). 
Run Code Online (Sandbox Code Playgroud)

但这并没有返回元素之类的 driver.FindElement(addButton)

什么时候使用上述声明?

drk*_*hng 5

以下是使用Java绑定中的术语,但它也适用于C#-Binding:

第一

@spcial是正确的,Selenium中没有定义"By.findElement(By)".然而,定义了一个"By.findElement(SearchContext)",我将在下面解释:

SearchContext与By

在Selenium中,你有一个名为a的接口SearchContext,然后你就拥有了这个By类.

A SearchContext可以是a WebElement或aWebDriver

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

1) SearchContext.findElement(By...)

要么

2) By.findElement(SearchContext...)

两者都做同样的事情!

在你的情况下,你有一个驱动程序和By变量,如下所示:

WebDriver driver = new FirefoxDriver();
By addButtonLocator = By.id("asdf");
Run Code Online (Sandbox Code Playgroud)

现在你可以通过两种方式找到你的元素:

1) driver.findElement(addButtonLocator);

要么

2) addButtonLocator.findElement(driver);

再次!两者都做同样的事情,这只是"读取"这些表达式的另一种方式:

1) "take the driver and search for an element using this By-statement"
Run Code Online (Sandbox Code Playgroud)

要么

2) "take the By-statement and search for an element that fits this statement within driver"
Run Code Online (Sandbox Code Playgroud)


如前所述,如果使用已识别的元素,则可以使用较小的范围代替驱动程序.