Javascript 无法使用带PageFactory的Selenium Java选择下拉元素

Javascript 无法使用带PageFactory的Selenium Java选择下拉元素,javascript,java,selenium,selenium-webdriver,automation,Javascript,Java,Selenium,Selenium Webdriver,Automation,我使用selenium中的page factory来识别元素。我无法理解硒的奇怪行为的一个例子就是这里 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. pa

我使用selenium中的page factory来识别元素。我无法理解硒的奇怪行为的一个例子就是这里

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属性是没有意义的,它在每个步骤中都以粗体显示,并使该步骤不可重用和垃圾化

让我知道是否有任何方法可以解决这个谜题,或者其他人在使用JAVASCRIPT开发web应用程序时遇到过类似问题

这是我在stackoverflow中提出的第一个问题,当我看到这种解决方案有效而不是无效时,我会发疯,并向更广泛的人群提问

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

当您使用webelement代替webdriver作为搜索上下文时,如果您使用的是xpath,则需要在xpath前面加上“.”前缀

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

谢谢您的解决方案。直到现在,我还在想为什么“.”总是放在xpath之前,现在我明白了。希望它能起作用