何时何地使用Bycine

时间:2015-09-24 07:46:59

标签: c# selenium webdriver

我对Selenium架构有基本的了解,其中搜索上下文是由Web Driver接口实现的主要接口,由各种浏览器驱动程序类扩展。通常,我们遵循POM来完成我们的selenium项目,并通过By class -

定义每个对象
By addButton=By.Id("asdf");

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

addButton.FindElement(By.XPath("ABC"). 

但是这不会返回像driver.FindElement(addButton)

这样的元素

何时使用上述声明?

1 个答案:

答案 0 :(得分:5)

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

第一

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

SearchContext vs. By

在Selenium中,您有一个名为SearchContext的界面,然后您拥有By类。

SearchContext可以是WebElementWebDriver

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

1)SearchContext.findElement(By...)

2)By.findElement(SearchContext...)

两者都做同样的事情!

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

WebDriver driver = new FirefoxDriver();
By addButtonLocator = By.id("asdf");

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

1)driver.findElement(addButtonLocator);

2)addButtonLocator.findElement(driver);

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

1) "take the driver and search for an element using this By-statement"

2) "take the By-statement and search for an element that fits this statement within driver"


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