2015-09-24 36 views
2

我對Selenium體系結構有基本的瞭解,其中Search Context是由各種瀏覽器驅動程序類擴展的Web Driver接口實現的主接口。通常情況下,我們按照POM我們的硒項目和他們通過類來定義每個對象 -何時何處使用FindElement方法按類

By addButton=By.Id("asdf"); 

但就意識到,我們甚至可以做 -

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

但是,這並不像driver.FindElement(addButton)

歸元

何時使用上述說明?

+0

你確定'addButton.FindElement(By.XPath(「ABC」))'是一個有效的表達式嗎?我使用Java而不是C#,Java不接受這個表達式,因爲Byxpath(「...」)是一個By.class,但是這個語句在這個組合中需要一個'SearchContext'(例如chromedriver) – spcial

+0

據我所知,這是我們如何在Java中使用它 - 'driver.findElement(addButton)'。當我們嘗試在關鍵字驅動框架中編寫泛型函數時,通常會使用它。 –

回答

4

使用條款從Java結合的下面,但它對於C# - 結合以及成立:

首先

@spcial是正確的,沒有「By.findElement(通過)「在Selenium中定義。不過有一個「By.findElement(SearchContext)」定義了我下面會解釋:

SearchContext與通過

硒你有叫SearchContext一個接口,那麼你有By類。

SearchContext可以是WebElementWebDriver

現在有兩個選項找到的元件(使用僞代碼):

1)SearchContext.findElement(By...)

2 )By.findElement(SearchContext...)

兩者都做同樣的事情!

說,在你的情況,你有一個司機和像這樣通過變量:

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

您可以通過兩種方式找到你的元素:

1)driver.findElement(addButtonLocator);

2)addButtonLocator.findElement(driver);

A獲得!都做同樣的事情,這只是另一種方式來「讀」這些表述是這樣的:

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" 


正如前面所說的,而不是驅動,你可以有如果使用已識別的元素,則範圍更小。

+0

很高興能有所幫助!你是對的! – drkthng

相關問題