【问题标题】:How to write css/xpath selector for a specific icon in specific row in table that is built from div's?如何为从 div 构建的表中特定行中的特定图标编写 css/xpath 选择器?
【发布时间】:2019-08-22 11:52:24
【问题描述】:

我正在尝试访问动态表中特定元素的“编辑”图标。

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 行中的编辑图标选择器。这个元素是在我的测试中创建的,然后我需要点击它的“编辑”图标。在这种情况下,我永远不知道元素的位置。

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

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

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

【问题讨论】:

  • 请详细说明“不起作用”。您是否收到错误或不正确的结果?
  • 请勿发布html图片,请发布html本身
  • “不起作用”是指我无法点击该元素并收到错误提示我的选择器不正确。

标签: selenium selenium-webdriver xpath css-selectors xpath-1.0


【解决方案1】:

要找到与文本 AutomationFacility 1249.0 相关的编辑 图标,您可以使用以下Locator Strategy

  • 使用XPATH

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

注意:你需要为想要的elementToBeClickable诱导WebDriverWait

【讨论】:

    【解决方案2】:

    您可以使用descendant XPath 轴和contains() 函数组合,如:

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

    参考资料:

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

    【讨论】:

    • 尝试使用你的 xpath 但仍然得到 Element not found 错误。
    【解决方案3】:

    尝试使用下面给定的 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']
    

    【讨论】:

      【解决方案4】:

      编辑您的意思不在一个 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 的值。

      【讨论】:

      • 我永远不知道我的元素会有哪个数字,因为我可能在某个时候有 10 或 15 行,如果我总是点击 [3],我会点击错误的元素
      • 请提供HTML
      • 在描述中添加了 HTML
      • @MikhailSiekhin 我已经更新了代码,请重试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多