我在页面上工作,页面动态加载页面,滚动时添加数据。为了识别项目的属性,我确定了父div,在哪里识别地址,我必须找到从父到span元素的XPath。 下面是我的DOM结构:
<div class = "parentdiv">
<div class = "search">
<div class="header">
<div class="data"></div>
<div class="address-data">
<div class="address" itemprop="address">
<a itemprop="url" href="/search/Los-Angeles-CA-90025">
<span itemprop="streetAddress">
Avenue
</span>
<br>
<span itemprop="Locality">Los Angeles</span>
<span itemprop="Region">CA</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
在这里,我想找到三个跨度,我在哪里。目前在父div。 有人可以指导如何使用特定div中的XPath定位元素吗?
答案 0 :(得分:1)
您可以尝试以下XPath,
找到街道地址:
//div[@class="parentdiv"]/div/div/a/span[@itemprop="streetAddress"]
找到地区/城市:
//div[@class="parentdiv"]/div/div/a/span[@itemprop="Locality"]
找到州:
//div[@class="parentdiv"]/div/div/a/span[@itemprop="Region"]
答案 1 :(得分:0)
您的DOM可能会变得相当大,因为它在滚动时添加了元素,因此使用CSS选择器可能会更快。
要获取div中的所有span
标记,请使用:
div[class='address'] span
要使用span
属性获取特定itemprop
,请使用:
div[class='address'] span[itemprop='streetAddress']
div[class='address'] span[itemprop='Locality']
div[class='address'] span[itemprop='Region']
您可以将元素存储在变量中,如下所示:
var streetAddress = driver.FindElement(By.CssSelector("div[class='address'] span[itemprop='streetAddress']"));
var locality = driver.FindElement(By.CssSelector("div[class='address'] span[itemprop='Locality']"));
var region = driver.FindElement(By.CssSelector("div[class='address'] span[itemprop='Region']"));
答案 2 :(得分:0)
要打印<span>
已标记为WebElements
的{{1}}文件列表,其Avenue
节点相对于div class = "parentdiv"
节点,您可以使用以下代码块:
IList<IWebElement> myList = Driver.FindElements(By.CssSelector("div.parentdiv > div.address > a[itemprop=url] > span"));
foreach (IWebElement element in myList)
{
string my_add = element.GetAttribute("innerHTML");
Console.WriteLine(my_add);
}