Как найти родителя двух элементов, которые соответствуют CssSelectors? - PullRequest
1 голос
/ 04 апреля 2019

Учитывая следующую (общую) динамическую структуру HTML:

<ol id="myOrderedList">
    <li id="someGuidICantPredict">
        <span data-serial="someData1">someData1</span>
        <span data-manufacturer="someDataB1">someDataB1</span>
    </li>
    //(repeated many times with different data)
</ol>

Как мне найти следующее:

Найдите <li>, где диапазоны соответствуют CssSelector для обоих data-serial и data-manufacturer?

Я знаю, как сделать это для одного или другого тега span таким образом:

By.CssSelector($"#olCurrentTanks li span[data-serial={serial1}]")

или

By.CssSelector($"#olCurrentTanks li span[data-manufacturer={manufacturer1}]")

Но я неНе знаю, как найти родительский элемент <li>, где совпадают оба диапазона.Это означает, что мне нужно получить IWebElement listItem, где оба атрибута данных диапазона соответствуют соответствующим данным, которые я могу предсказать.

Редактировать: Сложность: Хорошо, чтобы использовать x-path, чтобы получить li родитель, но не найти пролеты.

1 Ответ

1 голос
/ 04 апреля 2019

С вы можете получить li элемент с определенными span s потомками:

//li[./span[@data-serial="someData1"] and ./span[@data-manufacturer="someDataB1"]]

Селектор ниже даст все li элементов в виде списка для FindElements и один первый для FindElement:

By.XPath("//li[./span[@data-serial='someData1'] and ./span[@data-manufacturer='someDataB1']]")

Примеры кодов:

IList<IWebElement> allMyLi = driver.FindElements(By.XPath($"//li[./span[@data-serial='{serial1}'] and ./span[@data-manufacturer='{manufacturer1}']]"));

foreach (var myLi in allMyLi)
{
    IWebElement serial = myLi.FindElement(By.CssSelector($"span[data-serial={serial1}]"));
    IWebElement manufacturer = myLi.FindElement(By.CssSelector($"span[data-manufacturer={manufacturer1}]"));

    Console.WriteLine("serial, manufacturer: {0}, {1}", serial.Text, manufacturer.Text);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...