Selenium:动态查找CSS选择器

时间:2014-12-06 19:24:51

标签: java html selenium

我是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

的方法

4 个答案:

答案 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;