我是selenium的新手,我正在为现有的网络应用编写测试。我试图从动态生成的列表中选择一个选项。以下HTML是列表的示例:
<table id="selectChannelForm">
<tbody id=""></tbody>
<tbody id="">
<tr rowtype="container">
<td colspan="3" class="second">
<ul>
<li>
<a href="selectChannel.php?selectedChannelId=103">
<span>Sales Channel</span>
</a>
</li>
<li>
<a href="selectChannel.php?selectedChannelId=108">
<span>Demo channel</span>
</a>
</li>
<li>
<a href="selectChannel.php?selectedChannelId=112">
<span>Finance Channel</span>
</a>
</li>
<li>
<a href="selectChannel.php?selectedChannelId=121">
<span>HR Channel</span>
</a>
</li>
<li>
<a href="selectChannel.php?selectedChannelId=156">
<span>Management Channel</span>
</a>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
我需要选择其中一个频道进行测试,但问题是我无法进行直接的CSS或XPath参考,因为tbody和频道列表都会根据特定条件进行更改。如何使用channelId或span文本选择正确的选项?以下是对第四个选项的直接CSS引用。
WebElement channelBtn = driver.findElement(By.cssSelector("#selectChannelForm > tbody:nth-child(2) > tr > td > ul > li:nth-child(4) > a"));
是否可以在这些陈述中加入一些逻辑?或者其他一些选择nth-child
?
答案 0 :(得分:2)
您可以使用这样的xpath来查找您正在寻找的频道的链接:
//a[@href='selectChannel.php?selectedChannelId=108']
然后,只需用您需要的任何频道号替换108.
答案 1 :(得分:1)
使用'频道ID '
xpath = //a[@href='selectChannel.php?selectedChannelId=108']
css = a[href='selectChannel.php?selectedChannelId=108']
其次使用'范围文本'选择您可以使用的正确选项
xpath = //span[contains(text(),'Demo channel')]
css = span:contains('Demo channel')
答案 2 :(得分:0)
因此经过大量搜索后,我为基于CSS的方法提出了以下解决方案。完美运作
List<WebElement> channels = driver.findElements(By.tagName("span"));
for(WebElement channel : channels){
String selectedChannel = channel.getText();
if (selectedChannel.equalsIgnoreCase(channelId)){
channel.click();
break;
}
}
答案 3 :(得分:0)
您还可以使用CSS选择器尝试以下方式:
WebElement channelBtn = driver.findElement(By.cssSelector("td.second:nth-of-type(1) li:nth-of-type(4) span"));
这将导航到第一个td元素的第四个li标记下的范围标记,其中包含类&#39;第二个&#39; in网页,即&#34;人力资源频道&#34;