【问题标题】:Find element by exact text within the exact element using css selector使用 css 选择器在精确元素中通过精确文本查找元素
【发布时间】:2014-09-18 00:00:13
【问题描述】:

我想知道我是否可以通过 css-locators 通过精确文本匹配元素(总体目标是将其用作Selenium 的定位器)。我知道contains 方法

例如:

<div><div>S - Subscriber</div></div>

我可以通过css=div:contains('Subscriber')css=div:contains('S - Subscriber') 检索它,但我需要完全匹配。我试过css=div:contains('^S - Subscriber$') 并没有找到这个元素。

还有一点:

当我们使用xpath 时,我们可以通过使用text() 函数检索文本来假设给定的文本在精确元素中(例如//div[text()='S - Subscriber'] 将准确地指向子div,只要//div[contains(., 'S - Subscriber')] 将我们指向父 div,如果我没有搞砸的话),那么在 css 中是否有等价的另一种方式然后css=div &gt; div:contains('S - Subscriber')?我的意思是只指向一个元素,没有父 div。

提前致谢!

【问题讨论】:

  • 我在 jquery 中不需要它,我需要 css-selector 在 Selenium 中使用它。所以 css=div[text='S - Subscriber'] - 未找到,css=div[text()='S - Subscriber'] - 未找到,您能建议如何构建它以用作 Selenium 的元素描述吗?更新了问题,但我认为标签会提供信息

标签: selenium xpath selenium-webdriver css-selectors


【解决方案1】:

由于您使用的是 selenium,因此我将改用 Xpath。您将通过以下方式获得所需的元素:browser.find_element_by_xpath('//div[text()="S - Subscriber"]')

遗憾的是,您不能将 css 选择器用于您想要做的事情。

【讨论】:

  • 是的,我知道 :) 我的问题中有那个 xpath,但我对 css 定位器很感兴趣,因为它“更快”等等。
  • 我错过了 :) 但似乎 CSS 选择器不支持您正在尝试做的事情。在此处阅读投票最高的评论:stackoverflow.com/questions/16788310/…
  • 那么你的问题得到了回答 :) 如果你将其标记为这样,我将不胜感激 :)
  • 投票,因为也许有一天有人会想出解决方案:)
  • 人们直接假设 CSS 选择器会比 XPath 更快,这是怎么回事?这是我这周听到的second time。那么,如果甚至没有解决方案,它会更快怎么办?您是否会拒绝使用现成的替代方案仅仅因为它速度较慢(比不存在大声喊叫的解决方案)?
【解决方案2】:

您可以尝试使用正则表达式进行精确匹配。

var r = /^a$/;
css=a:contains((r.test('Text')) ? 'Text' : '');

【讨论】:

    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多