Javascript 无法使用带PageFactory的Selenium Java选择下拉元素
我使用selenium中的page factory来识别元素。我无法理解硒的奇怪行为的一个例子就是这里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
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之前,现在我明白了。希望它能起作用