从特定元素中识别XPath

时间:2017-11-14 09:35:25

标签: c# selenium xpath

我在页面上工作,页面动态加载页面,滚动时添加数据。为了识别项目的属性,我确定了父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定位元素吗?

3 个答案:

答案 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);
}