如何为 table 中从 div 构建的特定行中的特定图标编写 css/xpath 选择器?

How to write css/xpath selector for a specific icon in specific row in table that is built from div's?

我正在尝试访问动态 table 中特定元素的 "Edit" 图标。

HTML -

        <div class="fixedDataTableLayout_rowsContainer" style="height: 323px; width: 1882px;">
            <div class="fixedDataTableColumnResizerLineLayout_main fixedDataTableColumnResizerLineLayout_hiddenElem public_fixedDataTableColumnResizerLine_main" style="width: 0px; height: 325px; left: 0px;">
                <div class="fixedDataTableColumnResizerLineLayout_mouseArea" style="height: 325px;"></div>
            </div>
            <div class="fixedDataTableRowLayout_rowWrapper" style="width: 1882px; height: 48px; z-index: 1; left: 0px; top: 0px;">
                <div class="fixedDataTableRowLayout_main public_fixedDataTableRow_main fixedDataTableLayout_header public_fixedDataTable_header" style="width: 1882px; height: 48px;">
                    <div class="fixedDataTableRowLayout_body">
                        <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 48px; width: 0px; left: 0px;">
                            <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 48px; position: absolute; width: 0px; z-index: 2; left: 0px; top: 0px;"></div>
                        </div>
                        <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 48px; width: 1882px; left: 0px;">
                            <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 48px; position: absolute; width: 1882px; z-index: 0; left: 0px; top: 0px;">
                                <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 48px; width: 916px; left: 0px;">
                                    <div class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell cell-header text-center" style="height: 48px; width: 916px;">
                                        <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                            <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                <div class="public_fixedDataTableCell_cellContent">
                                                    <div class="sort-by ">Facility
                                                        <i class="fa fa-sort-undefined" style="margin-left: 3px; position: absolute; top: -3px;"></i>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 48px; width: 866px; left: 916px;">
                                    <div class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell cell-header text-center" style="height: 48px; width: 866px;">
                                        <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                            <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                <div class="public_fixedDataTableCell_cellContent">
                                                    <div class="sort-by "># of rooms
                                                        <i class="fa fa-sort-undefined" style="margin-left: 3px; position: absolute; top: -3px;"></i>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 48px; width: 100px; left: 1782px;">
                                    <div class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1" style="height: 48px; width: 100px;">
                                        <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                            <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                <div class="public_fixedDataTableCell_cellContent"></div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="" style="left: 0px; height: 48px;"></div>
                        <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 48px; width: 0px; left: 1882px;">
                            <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 48px; position: absolute; width: 0px; z-index: 2; left: 0px; top: 0px;"></div>
                        </div>
                    </div>
                </div>
            </div>
            <div>
                <div class="fixedDataTableRowLayout_rowWrapper" style="width: 1882px; height: 60px; z-index: 0; transform: translate3d(0px, 48px, 0px); backface-visibility: hidden;">
                    <div class="fixedDataTableRowLayout_main public_fixedDataTableRow_main public_fixedDataTableRow_even public_fixedDataTable_bodyRow" style="width: 1882px; height: 60px;">
                        <div class="fixedDataTableRowLayout_body">
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 0px; left: 0px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 0px; z-index: 2; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;"></div>
                            </div>
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 1882px; left: 0px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 1882px; z-index: 0; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;">
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 916px; left: 0px;">
                                        <div data="[object Object],[object Object],[object Object]" field="name" class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell undefined" style="height: 60px; width: 916px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">uitestsfacility</div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 866px; left: 916px;">
                                        <div data="[object Object],[object Object],[object Object]" field="roomCount" class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell text-center" style="height: 60px; width: 866px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">1</div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 100px; left: 1782px;">
                                        <div class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell text-center" style="height: 60px; width: 100px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">
                                                        <i class="fa fa-edit" data-tip="Edit Facility"></i>
                                                        <i class="fa fa-trash-o disabled" data-tip="Cannot be deleted due to rooms or devices belonged to this facility"></i>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="" style="left: 0px; height: 60px;"></div>
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 0px; left: 1882px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 0px; z-index: 2; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;"></div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="fixedDataTableRowLayout_rowWrapper" style="width: 1882px; height: 60px; z-index: 0; transform: translate3d(0px, 108px, 0px); backface-visibility: hidden;">
                    <div class="fixedDataTableRowLayout_main public_fixedDataTableRow_main public_fixedDataTableRow_highlighted public_fixedDataTableRow_odd public_fixedDataTable_bodyRow" style="width: 1882px; height: 60px;">
                        <div class="fixedDataTableRowLayout_body">
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 0px; left: 0px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 0px; z-index: 2; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;"></div>
                            </div>
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 1882px; left: 0px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 1882px; z-index: 0; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;">
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 916px; left: 0px;">
                                        <div data="[object Object],[object Object],[object Object]" field="name" class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell undefined" style="height: 60px; width: 916px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">testsearchfacility</div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 866px; left: 916px;">
                                        <div data="[object Object],[object Object],[object Object]" field="roomCount" class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell text-center" style="height: 60px; width: 866px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">1</div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 100px; left: 1782px;">
                                        <div class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell text-center" style="height: 60px; width: 100px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">
                                                        <i class="fa fa-edit" data-tip="Edit Facility"></i>
                                                        <i class="fa fa-trash-o disabled" data-tip="Cannot be deleted due to rooms or devices belonged to this facility"></i>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="" style="left: 0px; height: 60px;"></div>
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 0px; left: 1882px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 0px; z-index: 2; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;"></div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="fixedDataTableRowLayout_rowWrapper" style="width: 1882px; height: 60px; z-index: 0; transform: translate3d(0px, 168px, 0px); backface-visibility: hidden;">
                    <div class="fixedDataTableRowLayout_main public_fixedDataTableRow_main public_fixedDataTableRow_even public_fixedDataTable_bodyRow fixedDataTableLayout_hasBottomBorder public_fixedDataTable_hasBottomBorder" style="width: 1882px; height: 60px;">
                        <div class="fixedDataTableRowLayout_body">
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 0px; left: 0px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 0px; z-index: 2; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;"></div>
                            </div>
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 1882px; left: 0px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 1882px; z-index: 0; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;">
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 916px; left: 0px;">
                                        <div data="[object Object],[object Object],[object Object]" field="name" class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell undefined" style="height: 60px; width: 916px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">AutomationFacility 1249.0</div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 866px; left: 916px;">
                                        <div data="[object Object],[object Object],[object Object]" field="roomCount" class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell text-center" style="height: 60px; width: 866px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">0</div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="fixedDataTableCellLayout_main public_fixedDataTableCell_main" style="height: 60px; width: 100px; left: 1782px;">
                                        <div class="fixedDataTableCellLayout_wrap1 public_fixedDataTableCell_wrap1 text-cell text-center" style="height: 60px; width: 100px;">
                                            <div class="fixedDataTableCellLayout_wrap2 public_fixedDataTableCell_wrap2">
                                                <div class="fixedDataTableCellLayout_wrap3 public_fixedDataTableCell_wrap3">
                                                    <div class="public_fixedDataTableCell_cellContent">
                                                        <i class="fa fa-edit" data-tip="Edit Facility"></i>
                                                        <i class="fa fa-trash-o " data-tip="Delete Facility"></i>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="" style="left: 0px; height: 60px;"></div>
                            <div class="fixedDataTableCellGroupLayout_cellGroupWrapper" style="height: 60px; width: 0px; left: 1882px;">
                                <div class="fixedDataTableCellGroupLayout_cellGroup" style="height: 60px; position: absolute; width: 0px; z-index: 2; transform: translate3d(0px, 0px, 0px); backface-visibility: hidden;"></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

例如我需要 AutomationFacility 9341.0 行中的编辑图标选择器。这个元素是在我的测试中创建的,然后我需要点击它的 "Edit" 图标。在这种情况下,我永远不知道元素的位置。

提供的 HTML 编辑图标位于第 183 行 我试图通过这样的方式找到它:

 $(byXpath("//*[text()='"+facilityName+"']/i[@class='fa fa-edit']")).click();

但它不起作用,我收到错误消息说选择器不正确。

编辑您认为不在一个 div 中的图标和文本,这是您的 html 模式:

div
   div
      text
   div
   div
      text
   div
   div
      edit icon you mean
    div
div

我尝试使用 containspreceding-sibling,像这样:

facilityName = "AutomationFacility 1249.0";

$(byXpath("//*[contains(@class,'fixedDataTableCell') and ./preceding-sibling::*[contains(@class,'fixedDataTableCell')]//div[contains(text(),'"+facilityName+"')]]//i[@class='fa fa-edit']")).click();

尝试按预期更改 facilityName 的值。

您可以使用 descendant XPath axis and contains() 函数组合,例如:

//*[contains(text(), 'AutomationFacility')]/descendant::i[@data-tip='Edit Facility']

参考文献:

今后考虑包括 HTML 页面代码,而不是图像,获得全面答案的机会会更高

要根据文本 Edit icon 找到 AutomationFacility 1249.0,您可以使用以下 :

  • 使用XPATH:

    //div[@class='public_fixedDataTableCell_cellContent' and contains(.,'AutomationFacility 1249')]//following::i[@class='fa fa-edit' and @data-tip='Edit Facility']
    

注意:您需要为所需的elementToBeClickable.[=13 引入WebDriverWait =]

尝试使用下面给定的 xpath

//div[@class='fixedDataTableLayout_rowsContainer']//child::div[3]//child::div[1]//child::div[1]//child::div[1]//child::div[2]//child::div[1]//child::div[3]//child::div[1]//child::div[1]//child::div[1]//child::div[1]//child::i[@class='fa fa-edit']