2017-07-25 63 views
1

我在硒中使用頁面工廠來識別元素。這裏我無法理解硒的怪異的行爲有個例子,這裏下拉元素不能被選中使用Selenium Java與PageFactory

dateOfBirth 
passportExpiry 
driverLicence--- are the WebElements defined using pageFactory 

1. driverLicence.findElement(By.xpath("//div[@id='day-region']//div/span/a[text()='01']")).click(); 

2. passportExpiry.findElement(By.xpath("//div[@id='day-region']//div/span/a[text()='01']")).click(); 

3. dateOfBirth.findElement(By.xpath("//div[@id='day-region']//div/span/a[text()='01']")).click(); 

如果我們遵守上述3條線有一個類似的模式在剛剛webElement需要發送作爲參數。它看起來像下方,重複使用相同的每次

public void selectDay(WebElement we) {  we.findElement(By.xpath("//div[@id='day-}region']//div/span/a[text()='01']")).c 
lick(); 
} 

selectDay(dateOfBirth); 
selectDay(passportExpiry); 
selectDay(driverLicence); 

但它不工作,因爲這些我需要寫全的XPath完全像下面的代碼和它的作品 - 其怪異

1. driverLicence.findElement(By.xpath("**//div[@id='driver-licence']**//div[@id='day-region']//div/span/a[text()='01']")).click(); 

2. passportExpiry.findElement(By.xpath("**//div[@id='passport-licence']**//div[@id='day-region']//div/span/a[text()='01']")).click(); 

3. dateOfBirth.findElement(By.xpath("**//div[@id='date-of-birth']**//div[@id='day-region']//div/span/a[text()='01']")).click(); 

再次寫下每個步驟中以粗體提及的id屬性並使該步驟不可重用和垃圾是沒有意義的。

讓我知道如果有什麼辦法,我可以解決這個謎語或任何其他人都面臨着類似的問題上網絡Applciation工作用JavaScript

這是我在計算器的第一個問題,並深入到而當我從我的腦海,當我看到這種解決方案的工作,而不是

**webElement.FindElement(ChildElement).click** 

回答

1

當你在地方的webdriver的使用webelement作爲搜索上下文,如果你正在使用XPath需要前綴更寬的底部帶'。'的xpath

dateOfBirth.findElement(By.xpath(".//div[@id='day-region']//div/span/a[text()='01']")).click(); 

https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#findElements-org.openqa.selenium.By-

+0

感謝您的解決方案。直到現在我想知道爲什麼'。'總是放在xpath之前,現在我明白了。希望它有效 –

相關問題