需要替代XPath建议

时间:2017-03-14 12:22:02

标签: selenium xpath

首先,我对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,使其通过任何一年左右。

请建议我。通过这种方式,我将更多地了解它。

2 个答案:

答案 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")