CSS Selectors - Поиск уникального значения в дочернем элементе (ren) - PullRequest
0 голосов
/ 06 июня 2018

Я пишу тесты селена для веб-приложения.Приложение использует динамически построенные формы, что означает, что у меня есть множество неуникальных элементов, которые нужно пробовать (#ids не хватает, или очень высокого уровня).Эти формы также могут меняться в зависимости от настроек (положение элементов может быть разным, поэтому nth-child ненадежен).

Есть некоторые поля, которые я хочу найти по именам классов unqiue, которыми они обладают, однако онипохоронены внутри неуникальных элементов.Мне нужен способ найти эти элементы по их уникальным значениям (которые не являются #ids), чтобы их положение в форме не влияло на их обнаружение селеном.Хотя я не уверен, как это сделать.

Надеюсь, это объясняет сценарий:

<Some non-unqiue Div>
  <child>
    <child>
      <unique value 1>
<Some non-unqiue Div>
  <child>
    <child>
     <unique value 2>
<Some non-unqiue Div>
  <child>
    <child>
      <unique value I WANT THIS ONE>
<Some non-unqiue Div>
  <child>
    <child>
      <unique value 4>

Здесь вы можете видеть, что элемент, который я хочу, имеет уникальное значение, которому я хочу соответствовать.Однако я не могу использовать nth-child (3) для перехода к его родителям, поскольку порядок их появления может различаться.Например, в другом сценарии это может быть nth-child (2).

Таким образом, селектор, который может работать выше, может выглядеть следующим образом:

Some.nth-child(3) > child > child > [unique*=\"I WANT THIS ONE\"]

Однако в другом сценарии этоверхний родитель может быть nth-child (2), так что это больше не будет работать.

Есть ли какая-либо магия выбора Css, которую я могу использовать, чтобы убедиться, что я всегда могу найти этот элемент по его уникальному значению, независимо от того, гдев списке появляются его родители?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

О, мое слово.Я думаю, что наткнулся на ответ, и это то, о чем я даже не думал.

Так что в моих селекторах Css я всегда использовал «>» для разделения своих элементов, я всегда просто думал, что это был синтаксис для их разделения.Однако, просто прочитайте, что «>» для прямых потомков предыдущего элемента!

Если вы используете пробел вместо «>», тогда он ищет во всем дереве под этим элементом искомое значение!Я несколько самоучка в области автоматизации, и я не могу поверить, что не понимал, что это вещь.

Только что попробовал селектор, похожий на "#myId [value =" my value "]", используя пробел для разделения двух элементов, и он искал все дерево и правильно приземлился на моем элементе.

0 голосов
/ 06 июня 2018

Если я правильно уловил проблему, вот искатели, которые вы ищете:

'element/id/class:contains("I WANT THIS ONE")'

или для типа ввода:

'element/id/class[value="I WANT THIS ONE"]'

, например:

'input[value="I WANT THIS ONE"]'

или для элемента с innerHTML:

'div:contains("I WANT THIS ONE")'

или для них обоих:

'input[value="I WANT THIS ONE"],div:contains("I WANT THIS ONE")'

Может ли он использоваться для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...