我是初学者测试自动机,到目前为止我一直在使用直接XPATH参考 现在,我的任务是计算没有名称的列表中的列表项 我可以使用Chrome检查复制xpath,但该路径非常脆弱。在它上面添加任何元素都会使路径无效。寻找更智能的方式来查找列表 我正在使用Selenium-JUnit-GeckoDriver 以下是我的原始数据示例:
...
<div class="entry-content" itemprop="text"><h3></h3>
<p> </p>
<p>texttexttexttexttexttexttexttext</p>
<p> </p>
<h4 class="p1"><span class="s1">List ONE</span></h4>
<hr>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h4 class="p1"><strong><span class="s1">List TWO</span></strong></h4>
<hr>
<ul>
<li>d</li>
<li>e</li>
</ul>
...
在我现有的(和不充分的代码)中,我做了类似的事情:
// Find the text input element by xPath (from chrome inspect)
WebElement element = driver.findElement(By.xpath("//*[@id=\"main\"]/div/div/main/article/div[3]/div[1]/ul[1]"));
List<WebElement> listItems = element.findElements(By.tagName("li"));
...然后我对列表项进行测试。
如何自动化类似方法的东西,我给它一个搜索字符串(&#34; List ONE&#34;)并返回前面列表的所有列表项? (但不是&#34; List Two&#34的列表项目?)?
答案 0 :(得分:1)
仅仅因为我对它更熟悉,我会在这里使用CSS Selector。假设列表的顺序没有改变,并且感兴趣的列表在该div内,第一个列表的CSS选择器将是:
div.entry-content > ul:nth-of-type(1)
如果您真的想坚持使用XPath,我可以使用以下选项来选择第二个列表:
/div[contains(@class, "entry-content")]//span[contains(text(), 'List TWO')]//parent::*/parent::h4/following-sibling::ul[1]
这里我们找到包含列表的div,包含目标列表的标题,然后是所选h4之后的第一个ul列表元素。