问题是针对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标记的class
和TEXT
值。
第2部分:
然后我想获取<section class="standard-component image-sequence-button"...
元素,找到<span class="main-text">
,然后在特定section
标记内找到其他元素
问题2:
假设,我通过CSS找到问题1中的span
标记,如何获取section
标记(这是span
标记的超级---父级?
如果无法使用CSS,请提供相应的xpath作为解决方法一段时间。
答案 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?