用于检查类和文本的Selenium CSS选择器语法

时间:2015-09-30 23:51:10

标签: java css selenium xpath

问题是针对JAVA + Selenium:

我的HTML是:

<section class="d-menu d-outclass-bootstrap unclickable d-apps d-app-list">
<section class="standard-component image-sequence-button" tabindex="0" role="link">
    <div class="image-region">
        <div class="core-component image">...
    </div>
    <div class="sequence-region">
        <div class="core-component section">
            <div>
                <section class="standard-component text hide-section-separator-line">
                    <div class="text-region">
                        <div class="core-component text">
                            <span class="main-text">BART Times</span>
                            <span class="sub-text">Provider</span>
                        </div>
                    </div>
                </section>
                <section class="standard-component speech-bubble hide-section-separator-line">...
                <section class="standard-component text">...
            </div>
        </div>
    </div>
    <div class="button-region">
        <div class="core-component button" tabindex="0" role="link">...
    </div>
</section>
<section class="standard-component image-sequence-button" tabindex="0" role="link">...
<section class="standard-component image-sequence-button" tabindex="0" role="link">...
<section class="standard-component image-sequence-button" tabindex="0" role="link">...</section>

修改

所有<section class="standard-component image-sequence-button"...具有完全相同的结构和层次结构(所有标签的属性相同)。唯一改变的是标签的TEXT值(例如span

PART1: 我正在寻找第二个section标记内的各种元素。因此,我尝试做的是获取<span class="main-text">,因为业务需求,其值BART Times

我已经知道如何通过xpath获取它:

我的xpath(通过firebug验证):

"//section//div[@class = 'sequence-region']//section[@class = 'standard-component text hide-section-separator-line']//span[@class = 'main-text' and text() = '%s']"

我可以通过检查%s值来获取span标记(例如BART Times)。

但是,出于设计考虑,我们已被告知仅使用CSS。所以,我试图为上面的xpath提出一个CSS副本,但是没找到它。

以下CSS

"section div.sequence-region section.standard-component.text.hide-section-separator-line span[class=main-text]"

返回所有span标记下的所有section标记。

问题1:如何获取具有特定TEXT值的span标记(xpath的%s部分)?

我为最后一个span标签尝试过的事情(根据萤火虫):

  • span.main-text [text =&#39; BART Times&#39;]

    span [class = main-text] [text =&#39; BART Times&#39;]

    span.main-text:包含(&#39; BART Times&#39;)

    span [class = main-text]:包含(&#39; BART Times&#39;)

    span.main-text [text =&#34; BART Times&#34;]

    span [class = main-text] [text =&#34; BART Times&#34;]

    span.main-text [text = \&#34; BART Times \&#34;]

    span [class = main-text] [text = \&#34; BART Times \&#34;]

    span [text =&#34; BART Times&#34;]

    span [text = \&#34; BART Times \&#34;]

    span:包含(&#39; BART Times&#39;)

    span:包含(&#34; BART Times&#34;)

    span:contains(\&#34; BART Times \&#34;)

所以,基本上我想检查CSS选择器中span标记的classTEXT值。

第2部分: 然后我想获取<section class="standard-component image-sequence-button"...元素,找到<span class="main-text">,然后在特定section标记内找到其他元素

问题2: 假设,我通过CSS找到问题1中的span标记,如何获取section标记(这是span标记的超级---父级?

如果无法使用CSS,请提供相应的xpath作为解决方法一段时间。

2 个答案:

答案 0 :(得分:0)

CSS选择器无法根据文本进行选择。 Is there a CSS selector for elements containing certain text?的答案详细说明原因。

根据xpath中的类和文本进行选择://span[contains(@class, 'main-text') and text() = 'BART Times']

答案 1 :(得分:0)

关于问题1,如此处的其他答案所述,这是不可能的。这是关于该主题的另一个主题:CSS selector based on element text?

关于问题2,再次在XPath中没有这样的父选择器:Is there a CSS parent selector?。现在对于xpath对应物,您可以使用父轴(parent::*)或快捷符号表示相同的(..),或将span选择器作为父对象的谓词(第三个示例)下面):

....//span[@class = 'main-text' and text() = '%s']/parent::*
....//span[@class = 'main-text' and text() = '%s']/..
....//*[span[@class = 'main-text' and text() = '%s']]

请参阅以下主题,了解使用XPath的CSS类匹配元素的更好(但更复杂)的替代方法,以防万一您没有遇到关于此主题的链接:How can I find an element by CSS class with XPath?