收集表中的所有div id - 使用c#的webdriver

时间:2016-01-05 17:12:44

标签: c# html selenium

<table id="tblRenewalAgent" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td>
<div class="form-row">
<div id="trStatus" style="">
<div id="trFees" class="form-row" style="">
<div id="trFees1" class="form-row ctrl-column" style="">
<div id="trFilingReceipt" class="form-row" style="">
<div id="trComments" class="form-row" style="">
<div id="trContact" class="form-row" style="">
<div id="trEmail" class="form-row" style="">
<div id="trPhone" class="form-row" style="">
<div id="trCell" class="form-row" style="">
<div class="form-row">
<div class="form-row ctrl-column">
<div id="trAmountPaid">
<div id="trBalanceDue" class="form-row">
</td>
</tr>
</tbody>
</table>

预期:

我想收集所有div id并将其存储为数组 即时通讯使用c#。我该怎么做?请帮帮我们

2 个答案:

答案 0 :(得分:0)

WebDriverWait wait = new WebDriverWait(driver, timeout);
            List<WebElement> totalrow  =  wait.until(ExpectedConditions
                    .presenceOfAllElementsLocatedBy(By.Id("tblRenewalAgent"));

        for (int i = 0; i <= totalrow.size(); i++) {

            String clasRow = //form-row;

            try {

                WebElement element = ExpectedBehaviors
                        .expectPresenceofElementBy(driver, By.class(clasRow),
                                getAlertTimeout());

                if (element.getText().trim().equals("EXPECTED VALUE")) {

                    //"PERFORM YOUR ACTION"                     
                    break;
                }

            } catch (Exception e) {
                //"You can add your exception and error message

            }
        }

答案 1 :(得分:0)

第一步是创建一个XmlDocument。您需要包含System.Xml命名空间,如下所示:

using System.Xml;

下面我创建了一个示例应用程序,我将解释:

首先,您应该创建xml文档对象并加载一些xml。为了演示,我已逐字地包含了您的HTML,但您可以通过加载文件来替换它。例如。

var html = new XmlDocument();
        html.LoadXml(@"<table id='tblRenewalAgent' cellspacing='0' cellpadding='0' border='0'>
                <tbody>
                    <tr>
                        <td>
                            <div class='form-row'/>
                            <div id='trStatus' style=''/>
                            <div id='trFees' class='form-row' style=''/>
                            <div id='trFees1' class='form-row ctrl-column' style=''/>
                            <div id='trFilingReceipt' class='form-row' style=''/>
                            <div id='trComments' class='form-row' style=''/>
                            <div id='trContact' class='form-row' style=''/>
                            <div id='trEmail' class='form-row' style=''/>
                            <div id='trPhone' class='form-row' style=''/>
                            <div id='trCell' class='form-row' style=''/>
                            <div class='form-row'/>
                            <div class='form-row ctrl-column'/>
                            <div id='trAmountPaid'/>
                            <div id='trBalanceDue' class='form-row'/>
                        </td>
                    </tr>
                </tbody>
            </table>");

你也错过了你的div的结束标签,我让他们自己关闭了这个演示。

我还创建了一个静态通用的字符串列表,我们将添加所有的id字符串,如下所示:

static List<string> ids = new List<string>();

我把它置于我的Main方法之上。

最后,您应该在每个文档子节点上调用我在下面定义的 WalkForIds 方法:

foreach (XmlNode elem in html.ChildNodes)
    WalkForIds(elem);

WalkForIds方法以递归方式查看HTML以查找所有ID。这是定义:

    private static void WalkForIds(XmlNode node)
    {
        if(node.HasChildNodes)
            foreach (XmlNode child in node.ChildNodes)
                WalkForIds(child);
        if (node.Attributes == null) return;
        foreach (XmlAttribute attr in node.Attributes)
            if (attr.Name == "id")
                ids.Add(attr.Value);

    }

在此之后,您会发现 ids 通用列表将包含HTML中的所有ID。