首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#和Selenium如何在非结构化的情况下获取元素及其值

使用C#和Selenium如何在非结构化的情况下获取元素及其值
EN

Stack Overflow用户
提问于 2020-06-20 23:20:50
回答 1查看 174关注 0票数 0

使用C#和,我试着

  1. Property 标记中的每个属性、设置和Config。

  1. 他们的子项目在子项目中。

  1. 他们的价值在价值中。

不使用分隔符,因此,如果任何值之间有空格,则不能拆分文本。二、属性、设置和Config是固定的;但是子项的数目和它们的值不固定。所以他们的立场在不断变化。

我应该采取什么方法?

下面给出了一个示例HTML。

代码语言:javascript
复制
<span class="list_props">
    <div style="height:8px;overflow:hidden;clear:left;"></div>
        <strong>Profile</strong>
            <strong style="font-style:italic;">Prop1:</strong>
                <a href="" title="P1-Profile Item 1">P1 Profile Item 1</a> 
            <strong style="font-style:italic;">Prop2:</strong> 
                <a href="" title="P2-Profile Item 1">P2 Profile Item 1</a> 
            <strong style="font-style:italic;">Prop3:</strong> 
                 <a href="" title="P3-Profile Item 1">P3 Profile Item 1</a>
                 <a href="" title="P3-Profile Item 2">P3 Profile Item 2</a>
    <div style="height:8px;overflow:hidden;clear:left;"></div>
        <strong>Settings</strong>
            <strong style="font-style:italic;">Setting1:</strong>
                <a href="" title="Setting1 Value1">Setting1 Value1</a>
    <div style="height:8px;overflow:hidden;clear:left;"></div>
        <strong>Config</strong>
            <strong style="font-style:italic;">Config:</strong>
                <a href="" title="config-1">config 1</a>
                <a href="" title="config-2">config 2</a> 
 </span>

我尝试过一些事情,但我能达到的最好的是下面给出的。它没有给出适当的结果。

代码语言:javascript
复制
var props = c.FindElement(By.XPath("//*[@id='ajax-prop-details-" + objectid + "']"))
.FindElements(By.XPath(".//span[@class='list_props']/")).ToList();

foreach(var ca in props)
    {
        Console.WriteLine("> " + ca.Text);
        var attribs = ca.FindElements(By.XPath(".//following-sibling::")).ToList();
            foreach (var atrb in attribs)
                {
                Console.WriteLine(">> " + atrb.Text);
                }
    }
EN

回答 1

Stack Overflow用户

发布于 2020-06-22 07:42:02

你的XPaths有点差,

  • .//span[@class='list_props']/应改为.//span[@class='list_props']
  • .//following-sibling::,应改为.//following-sibling::*

我建议的是在Chrome的检查元素的查找部分测试您的XPaths。

如果以上提供了更新,您的代码将能够正常运行,如下所示:

代码语言:javascript
复制
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Linq;

namespace FindingElements
{
    public class ProgramB
    {
        public static IWebDriver Driver = new ChromeDriver();

        private static void Test()
        {
            var props = Driver.FindElements(By.XPath("//span[@class='list_props']")).ToList();

            foreach (var ca in props)
            {
                Console.WriteLine("> " + ca.Text);
                var attribs = ca.FindElements(By.XPath(".//following-sibling::*")).ToList();
                foreach (var atrb in attribs)
                {
                    Console.WriteLine(">> " + atrb.Text);
                }
            }
        }
        public static void Main(string[] args)
        {
            Driver.Navigate().GoToUrl("file:///D:/temp/example.html");

            Test();
        }
    }
}

说到这一点,首先还是很难实现您的意图,原因是属性标记不是它的子项及其值的实际html父级,而是一个“逻辑”父级。这使得使用XPath (通常用于使用父/子关系来定位元素)进行定位仍然很困难,而不是使用其他元素之前或之后的元素进行定位。我建议您也使用一个look here,它可以帮助实现这种类型的元素定位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62492796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档