选择包含特定文本的selenium中的文本

时间:2018-02-22 12:23:50

标签: css selenium xpath selenium-webdriver

<aside class="reply-flap js-captcha">
<ul>

        <li>
            <h1>contact name:</h1>
            <p>joel Rupp</p>
        </li>
    <li class="reply-tel">
        <h1>
                <a class="reply-tel-link" href="tel:14085551324">call</a>
                    <span class="reply-tel-text">call</span>

or
                <a class="reply-tel-link" href="sms:14055651324">text</a>
                <span class="reply-tel-text">text:</span>
        </h1>
        <p class="reply-tel-number">
            ☎ (408) 555-5678
        </p>
    </li>

    <li class="reply-email">
        <h1>reply by email:</h1>
            </li>
    <li>
        <h1>webmail links:</h1>
        <ul class="reply-emails">
            <li>
                <p>
                          </p>
            </li>
            <li>
                <p>
                           </p>
            </li>
            <li>
                <p>
                           </p>
            </li>
            <li>
                <p>
                           </p>
            </li>
        </ul>
    </li>
    <li>
        <h1>copy and paste into your email:</h1>
        <p class="anonemail">cjgmz-6484327676@serv.ytutyuty.org</p>
    </li>
</ul>

</aside>

我想从此代码中选择联系人姓名,但有时当名称为空时,我会得到以下(li)元素文本,即电子邮件地址,当找不到名称时,它应输出空白。 我正在使用此代码:

name = driver.switchTo().window(child_window).findElement(By.cssSelector("aside.reply-flap.js-captcha ul  > li:nth-child(1) p")).getText();

我知道如果我使用jsoup我可以使用contains(联系人姓名:) 我如何在硒中使用含量?

我尝试了类似

的内容
h1[contains(text()='contact name:')]

并且它根本不起作用

1 个答案:

答案 0 :(得分:0)

要使用包含<p>标记下方的<h1>标记中检索文字联系人姓名,您可以使用以下内容xpath

name = driver.switchTo().window(child_window).findElement(By.xpath("//aside[@class='reply-flap js-captcha']/ul/li/h1[contains(text(),'contact name:')]//following::p[1]")).getText();
  

注意:根据规范,:包含 伪类不能用作CSS。在这里,您可以找到详细的讨论selenium.common.exceptions.InvalidSelectorException with “span:contains('string')”