Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XPATH-在标识文本后选择/查找表中的下一个元素_Xml_Xpath_Selenium - Fatal编程技术网

Xml XPATH-在标识文本后选择/查找表中的下一个元素

Xml XPATH-在标识文本后选择/查找表中的下一个元素,xml,xpath,selenium,Xml,Xpath,Selenium,很抱歉,我不熟悉XPath和XML,但由于我在使用Selenium,我需要一些帮助来通过XPath识别元素。由于页面上的内容我正在为改变位置而工作,我首先需要按名称选择顶层,然后按位置选择后续子菜单。。。 子菜单将隐藏,直到单击顶层 示例菜单 运动1 场地1 比赛1 比赛2 比赛3 场地2 比赛1 比赛2 比赛3 运动2 场地1 比赛1 比赛2 场地2 比赛1 比赛2 到目前为止,//a[text='Sport2']将选择并分支sports2-无论它位于菜单中的何处 和//li[2]/ul/li

很抱歉,我不熟悉XPath和XML,但由于我在使用Selenium,我需要一些帮助来通过XPath识别元素。由于页面上的内容我正在为改变位置而工作,我首先需要按名称选择顶层,然后按位置选择后续子菜单。。。 子菜单将隐藏,直到单击顶层

示例菜单

运动1 场地1 比赛1 比赛2 比赛3 场地2 比赛1 比赛2 比赛3 运动2 场地1 比赛1 比赛2 场地2 比赛1 比赛2

到目前为止,//a[text='Sport2']将选择并分支sports2-无论它位于菜单中的何处

和//li[2]/ul/li[2]/ul/li[2]/a将选择第二个运动项目、第二个场地,然后选择第二场比赛

然而,我需要的是能够通过文本选择运动项目,如//a[text='Sports2'],然后选择第二个场地,然后再选择第二场比赛……我想通过位置进行这些操作,因为名称每天都在变化

我尝试的是//a[text='Sports2']/li[2]/ul/li[2]/a,但不起作用


有什么想法吗?

在html代码清晰易懂之前,我只能给你一些一般性的建议:

如果您使用的是WebDriver Selenium 2,您可以找到一个元素,然后调用它-这将只搜索底层节点,而不是整个文档:

WebElement elem = driver.findElement(By.xpath("//a[text()='Sport2']"));
elem.findElement(By.xpath("./something[something()]"));
如果您不是,那么来自的以下信息可能会有所帮助:

位置路径//第[1]段的含义与位置不同 路径/后代::第[1]段。后者选择第一个后代 对位元素;前者选择所有已被删除的子体para元素 他们父母的第一个孩子

一种方法是完全使用FindElement或By.XPath指定的FindElement。你可以这样做,我绝对不认为这是最好的方法,因为它相当混乱,而且过于复杂,首先是在你想要的元素上划分区域,然后抓住它们。要执行此操作,请按如下方式运行代码:

IWebElement sport2 = driver.FindElement(By.XPath("//a[text()= 'Sports2']"));
ReadOnlyCollection<IWebElement> Venues = driver.FindElements(By.XPath("//a[text()= 'Venue']"));
ReadOnlyCollection<IWebElement> Races = Venues[1].FindElements(By.XPath("//a[text()= 'Race']"));
// now you want Races[1]

希望这有帮助!尽管正如其他人所说,html将有助于获得更高效的答案。

嗨,Treemonkey,我承认我不是xml的最佳选择,它是一个相当高级的页面。。。。但是,以下是顶部菜单级别的一个片段,其他子菜单在单击“查看下一篇文章”之前是隐藏的,因为您没有提供任何XML文档,问题的原因一定是天气不好。@DimitreNovatchev猜想你的英国总部也是LOL:/rain/rain/rain@Treemonkey:不,我住在西雅图附近: