给出以下(通用)动态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>
中找到data-serial
和data-manufacturer
都由CssSelector匹配的范围吗?
我知道如何对一个或另一个span标签执行此操作:
By.CssSelector($"#olCurrentTanks li span[data-serial={serial1}]")
或
By.CssSelector($"#olCurrentTanks li span[data-manufacturer={manufacturer1}]")
但是我不知道如何找到两者都匹配的父<li>
元素。这意味着我需要获取IWebElement listItem
,其中两个跨度的数据属性都与我可以预测的相应数据相匹配。
编辑:难度:可以使用x路径获取li
父对象,但不查找跨度。
答案 0 :(得分:1)
使用xpath,您可以获得带有特定li
个孩子的span
元素:
//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);
}