我对Selenium架构有基本的了解,其中搜索上下文是由Web Driver接口实现的主要接口,由各种浏览器驱动程序类扩展。通常,我们遵循POM来完成我们的selenium项目,并通过By class -
定义每个对象By addButton=By.Id("asdf");
但只是意识到我们甚至可以做到 -
addButton.FindElement(By.XPath("ABC").
但是这不会返回像driver.FindElement(addButton)
何时使用上述声明?
答案 0 :(得分:5)
以下是使用Java绑定中的术语,但它也适用于C#-Binding:
@spcial是正确的,Selenium中没有定义“By.findElement(By)”。然而,定义了一个“By.findElement(SearchContext)”,我将在下面解释:
在Selenium中,您有一个名为SearchContext
的界面,然后您拥有By
类。
SearchContext
可以是WebElement
或WebDriver
现在您有两个选项来查找元素(使用伪代码):
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"
如前所述,如果您使用已经识别的元素,则可以使用较小的范围代替驱动程序。