Как найти элемент по css селектор ведьма содержит атрибут и текст - PullRequest
0 голосов
/ 20 января 2020
<span _ngcontent-c77="" class="status-label success" tooltipcontainer="body" tooltipheader="Error" tooltipmode="click" tooltipposition="top" data-test-id="status"> online </span>

В xpath я могу найти этот элемент по

//*[@data-test-id="status" and text()=" online "]

Но я не могу понять, как найти этот элемент, содержащий текст «онлайн» с помощью селектора css. Помогите мне с этим, пожалуйста.

Ответы [ 4 ]

2 голосов
/ 20 января 2020

Вы не можете сделать это с помощью css_selector, xpath - единственный способ найти по тексту. Существует find_element_by_link_text, но только для тегов <a> и без дополнительных атрибутов.

1 голос
/ 20 января 2020

Вы не можете, потому что Selenium поддерживает CSS2, а contains() - это CSS3. Вы можете найти подробную информацию здесь

0 голосов
/ 20 января 2020

Вы не сможете найти элемент с помощью , используя innerText, т.е. contains('string'). Вы можете найти подробное обсуждение в selenium.common.exceptions.InvalidSelectorException с «span: Содержит ('строка')" .

Чтобы найти элемент, вы можете использовать любой из следующих Стратегии локатора :

  • CSS_SELECTOR 1:

    span.status-label.success[tooltipcontainer='body'][tooltipheader='Error']
    
  • CSS_SELECTOR 2:

    span[data-test-id='status'][tooltipcontainer='body'][tooltipheader='Error']
    
0 голосов
/ 20 января 2020

Это невозможно.

Но я думаю, что вы можете использовать "data -"

Копировать содержимое из вашего охвата в данные: data-text = "online"

Например:

<span _ngcontent-c77="" data-text="online" class="status-label success" tooltipcontainer="body" tooltipheader="Error" tooltipmode="click" tooltipposition="top" data-test-id="status"> online </span>

И CSS:

/* Select every cell containing "Online" */
span[data-text*="online"] {
  color: green;
}
...