首先,我对XPath的功能感到不知所措,我正在努力学习它。
我需要编写XPath以便在Selenium中使用以在此网站上找到离开日期:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94,我尝试了类似这样的内容来查找“3月30日”。
//div[text()='March']/../div[contains(@id,'PegasusCal-0')]//span[text()='30']
上面的XPath在2017年和2018年工作正常,但我仍然觉得还有其他方法可以使用真正的XPath功能编写这个XPath并使其更通用。我的要求是编写XPath,使其通过任何一年左右。
请建议我。通过这种方式,我将更多地了解它。
答案 0 :(得分:0)
您可以做的是,您可以为要输入的任何值创建一个通用X路径:
您可以将日期保存为三个变量:
年:2017
月:3
日:30
findElement(By.xpath(".//a[@id='a_" + year + "_" + month + "_" + day + "']/span");
如果假设您的年份固定为2017年,那么:
findElement(By.xpath(".//a[@id='a_2017_" + month + "_" + day + "']/span");
答案 1 :(得分:0)
只是为了补充Kishan的答案。似乎有几个元素具有id' a_2017_3_30'在页面中。因此,我们必须限制我们寻找它的范围。或者我们也可以通过我们可以提供变量的方式制作限制器。
//div[starts-with(@id,'PegasusCal') and div[contains(text(),'Depart')]]//a[@id='a_2017_3_30']
所以,让我们制作文本'离开' 2017'' 3'和' 30'方法的所有变量。
public void selectDateForDateField(int year, int month, int day, String dateField) {
browser.findElement(By.xpath("//div[starts-with(@id,'PegasusCal') and div[contains(text(),'" + dateField + "')]]//a[@id='a_" + year + "_" + month + "_" + day + "']"));
}
所以你可以用它作为:
selectDateForDateField(2017,3,30,"Depart")
selectDateForDateField(2018,4,24,"Return")