我想使定位器在driver.findElement(####)
中是通用的。這意味着我可以使用不同的定位器,如By.Id
或By.Name
或By.Xpath
等...來定位特定元素。如何使driver.findelement爲Selenium中不同定位器的通用?
我該如何將此作爲通用語句?
我想使定位器在driver.findElement(####)
中是通用的。這意味着我可以使用不同的定位器,如By.Id
或By.Name
或By.Xpath
等...來定位特定元素。如何使driver.findelement爲Selenium中不同定位器的通用?
我該如何將此作爲通用語句?
我在你的問題下面閱讀了評論,並認爲我知道你要達到的目標,因爲我在C#中爲我的項目做了類似的事情。我們的系統在多個分支上進行測試,並且在這些分支上,我們有需要不同元素定位器的部分,在一個分支上,我們使用XPath,在另一個分支上使用類選擇器,您就明白了。
爲了避免您所描述的問題,必須通過整個項目並在更改分支/釋放時替換所有這些選擇器,我將所有選擇器移至一系列類中。這裏是一個例子:
假設我想單擊後退按鈕。在分支A
上,該按鈕位於By.Id("My-Back-Button")
。在分行B
上,該按鈕位於By.CssSelector(".take.me.back")
。
首先,我將創建一個名爲Selectors
的抽象類,它將定義一個名爲public By BackButton()
之類的抽象方法。然後我會創造的Selectors
,BranchA
和BranchB
2個類這將覆蓋的方法BackButton
:
// Within BranchA : Selectors
@override
public By BackButton() { return By.Id("My-Back-Button"); }
// Within BranchB : Selectors
@override
public By BackButton() { return By.CssSelector(".take.me.back"); }
的最後一步是將有一個工廠類,將決定你需要哪個分支。在我的解決方案中,我有一個XML配置文件,可以通過此工廠類讀取以確定要使用哪個類,但在您的情況下,靜態bool可能已足夠。
這個工廠類,SelectorFactory
將有一個名爲public Selectors Get()
方法會使用一些情況下,/開關/如果來創建所需的子類的新實例Selector
。
最終的解決方案將是如下:
// During development
Driver.FindElement(SelectorFactory.Get().BackButton()).Click();
// Clicks By.Id("My-Back-Button");
// During release
Driver.FindElement(SelectorFactory.Get().BackButton()).Click();
// Clicks By.CssSelector(".take.me.back");
希望幫助!
我不確定C#代碼。請在Java中提供相同的解決方案。提前致謝。 – Kumar
你並不需要所有這些「發現者」......你只能使用「By.Xpath」。例如,如果你有元素的'id'或'name',你可以通過'xpath'找到元素 - ''//元素[@ id =「element's id」]'''''元素[@ name =「元素的名字「]」' – Andersson
感謝你們倆。我在重複問題,可能是我讓你困惑。在我的應用程序發佈期間,我不得不將id更改爲xpath或類名稱或標記。所以我不能使用像driver.findElement(By.id())這樣的元素選擇方法。 在下一個構建中,我可能必須使用driver.findElement(By.xpath())或driver.findElement(By.name())作爲相同的元素位置。這意味着我將不得不訪問我編寫的每個類文件並將By.id()修改爲相應的選擇器。 有沒有辦法通過參數化或其他方式來解決這個問題? – Kumar