我在selenium中使用页面工厂来识别元素。我无法理解硒的奇怪行为的一个这样的案例就在这里
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进行网络应用时,是否有任何方法可以解决这个问题或任何其他人遇到类似问题
这是我在stackoverflow中的第一个问题,当我看到这种解决方案工作而不是
时,我想到了更广泛的基础**webElement.FindElement(ChildElement).click**
答案 0 :(得分:1)
当您使用webelement作为搜索上下文代替webdriver时,如果您使用的是xpath,则需要在xpath前加上'。'
dateOfBirth.findElement(By.xpath(".//div[@id='day-region']//div/span/a[text()='01']")).click();