有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通过与已知元素的接近程度来获取未命名的Web元素

我是一名测试自动程序初学者,到目前为止,我一直在使用直接XPATH引用
现在,我的任务是在一个没有名字的列表中计算列表项
我可以使用Chrome inspect复制xpath,但这条路径非常脆弱。在上面添加任何元素都会使路径无效。正在寻找一种更智能的方法来查找列表
我正在使用Selenium JUnit GeckoDriver
以下是我的原始数据示例:

...
<div class="entry-content" itemprop="text"><h3></h3>
<p>&nbsp;</p>
<p>texttexttexttexttexttexttexttext</p>
<p>&nbsp;</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"));

。。。然后我对列表项进行测试

我怎样才能自动执行一个方法之类的操作,我给它一个搜索字符串(“List ONE”),它会返回前面列表中的所有列表项?(但不是“清单二”的列表项)


共 (1) 个答案

  1. # 1 楼答案

    只是因为我更熟悉它,我会在这里使用CSS选择器。假设列表的顺序不变,并且感兴趣的列表位于该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 list元素