XPath按类名查找子节点

时间:2017-09-07 09:25:03

标签: java selenium xpath

好的,所以我有一个多自动输入,对于selenium要求我输入一些文本,然后等到列表可见并按Tab键。

我使用以下代码执行此操作:

we.sendKeys(initialInput);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"ui-id-1\"]")));
we.sendKeys(Keys.TAB);

这是一个接收WebElement的方法,我们是多个自动输入的输入区域。

HTML如下:

<ul id="contactPersonDataWrap" class="inputAutoText tagit" data-id="contactPersonData" data-what="contactPersonDataGeneral" data-strict="1" data-max-tags="1" data-events="" data-extra-params="branchData" data-max-length="1000">
  <li class="tagit-new">
    <input class="tagit-input ui-autocomplete-input" type="text" maxlength="1000" name="contactPersonDataInput" autocomplete="off">
  </li>
    <ul id="ui-id-3" tabindex="0" class="ui-menu ui-widget ui-widget-content ui-autocomplete ui-front" style="display: none;">  
  </ul>
</ul>

这是第二个,第一个完全相同,但id是ui-id-1,输入名称也不同。

我想要一个甚至可以在包含N个页面的页面中运行的解决方案,在给定输入的WebElement的情况下,我可以简单地等待列表加载。

2 个答案:

答案 0 :(得分:2)

我希望我说得对,在输入数据后,您需要通用的xpath来识别任何列表。

你可以拥有你的xpath,试试这个xpath:

   //ul[contains(@class,'inputAutoText')]//ul[contains(@class,'ui-autocomplete ui-front') and contains(@id,'ui-id-')]

希望这会有所帮助。

谢谢

答案 1 :(得分:1)

在代码中试用xpaths

//ul[contains(@class,'inputAutoText')]//ul[contains(@id,'ui-id')]

 //ul[contains(@class,'inputAutoText')]//ul[contains(@id,'ui-id-"+N thnumber+"')]