如何找到动态添加的字符串?

时间:2017-09-10 12:12:52

标签: java selenium

如何检查新追加元素的文本是否等于字符串? 我想在聊天中找到一个单词,但看起来我指的是同一个元素。

while (true){
        try {
            WebDriverWait wait = new WebDriverWait(driver, 5);
            wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//span[@class='msg-body']"), "Hello"));
            System.out.println("Found Hello");

        } catch (Exception e) {
            System.out.println("Nothing found");
        }
            Thread.sleep(100);
    }

聊天HTML的一部分

<li class="msg-chat-message">
            <span class="user role-user">
                <img class="user-logo" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/d6/d6e4e034324f1e2abe161a8239f243a2f48e08e9.jpg">
                    <div class="user-level-container">
                        <div class="user-level level-item level-70">75</div>
                    </div>
                    <span class="drop-down-container _3_options">
                        <ul class="user-dropdown-invisible">
                            <li class="user-dropdown-entry">Stats</li>
                            <li class="user-dropdown-entry">Tip</li>
                            <li class="user-dropdown-entry">Ignore</li>
                            <!-- react-text: 928 -->
                            <!-- /react-text -->
                        </ul>
                    </span>
                    <span class="user-name">
                        <span>
                            <!-- react-text: 931 -->RePo 
                            <!-- /react-text -->
                            <span class="icon-balanceicon namepromotion" title="This user has activated the Name Promotion"></span>
                            <!-- react-text: 933 -->
                            <!-- /react-text -->
                        </span>
                        <!-- react-text: 934 -->: 
                        <!-- /react-text -->
                    </span>
                </span>
                <span class="msg-body">all of you</span>
            </li>
            <li class="msg-chat-message">
                <span class="user role-user">
                    <img class="user-logo" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/1a/1a5e80deb58be484e49ea9a9434faa7a6528654b.jpg">
                        <div class="user-level-container">
                            <div class="user-level level-item level-50">50</div>
                        </div>
                        <span class="drop-down-container _3_options">
                            <ul class="user-dropdown-invisible">
                                <li class="user-dropdown-entry">Stats</li>
                                <li class="user-dropdown-entry">Tip</li>
                                <li class="user-dropdown-entry">Ignore</li>
                                <!-- react-text: 946 -->
                                <!-- /react-text -->
                            </ul>
                        </span>
                        <span class="user-name">
                            <span>
                                <!-- react-text: 949 -->Anonymous 
                                <!-- /react-text -->
                                <span class="icon-balanceicon namepromotion" title="This user has activated the Name Promotion"></span>
                                <!-- react-text: 951 --> 3
                                <!-- /react-text -->
                            </span>
                            <!-- react-text: 952 -->: 
                            <!-- /react-text -->
                        </span>
                    </span>
                    <span class="msg-body">kk</span>
                </li>
                <li class="msg-chat-message">
                    <span class="user role-user">
                        <img class="user-logo" src="https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/44/44c705474e17ebe8a2a9ef70467c20ee5add283e.jpg">
                            <div class="user-level-container">
                                <div class="user-level level-item level-50">52</div>
                            </div>
                            <span class="drop-down-container _3_options">
                                <ul class="user-dropdown-invisible">
                                    <li class="user-dropdown-entry">Stats</li>
                                    <li class="user-dropdown-entry">Tip</li>
                                    <li class="user-dropdown-entry">Ignore</li>
                                    <!-- react-text: 964 -->
                                    <!-- /react-text -->
                                </ul>
                            </span>
                            <span class="user-name">
                                <span>
                                    <!-- react-text: 967 -->Rrubinski. for  EM 
                                    <!-- /react-text -->
                                    <span class="icon-balanceicon namepromotion" title="This user has activated the Name Promotion"></span>
                                    <!-- react-text: 969 -->
                                    <!-- /react-text -->
                                </span>
                                <!-- react-text: 970 -->: 
                                <!-- /react-text -->
                            </span>
                        </span>
                        <span class="msg-body">which one u want?</span>
                    </li>

到目前为止,我创建了元素列表,它的大小等于400项(当聊天填充消息时);但是仍然想知道是否有可能跟踪新元素而不是循环400次。

elementList = driver.findElements(By.xpath("//span[@class='msg-body']"));
            for (WebElement element: elementList) {
                if (element.getText().equals("nice")) {
                    System.out.println("Done");
                    System.out.println("List size: " + elementList.size());
                }
            }
            Thread.sleep(200);

1 个答案:

答案 0 :(得分:0)

请检查一下让我知道。

我假设该消息将自动附加在dom中,其类似于

<span class="msg-body">which one u want?</span>

目标是获取最后一条附加消息的文本。我们可以知道消息的实例数,并获取最后一个消息的文本。

int size = driver.findElements(By.xpath("//span[@class='msg-body']")).size();

现在获取最后一条消息的文本。

String message = driver.findElement(By.xpath("//span[@class='msg-body'][" + size + "]")).getText();

以后的用户Java API或TestNG方法来验证字符串消息。

希望这会有所帮助。感谢。