【问题标题】:using locators to access sibling of current element使用定位器访问当前元素的兄弟
【发布时间】:2016-03-28 17:59:57
【问题描述】:

我如何使用 findelement ,从 id=1.custom-system-user.generatepassword 的元素中找到第三个 div 元素,然后是第三个 中的 img 元素div 兄弟?

请注意,不能保证 table 元素是第一个兄弟元素,所以我需要仅访问相对于 table 元素的第三个 div(我不能依赖 div 是第 n 个兄弟)?

P.s - 有没有这样的东西“嵌套”css 选择器/定位器( table+div+div+div>img )?

注意

【问题讨论】:

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


    【解决方案1】:

    你可以试试这个

    driver.findElement(By.xpath("//table[@id='0.custom-System-User.generatePassword']/div[3]/div/div/img"))
    

    【讨论】:

    • 如果我错了,请纠正我,但“/ div[3]”不是暗示 div[3] 是 table 的孩子(我需要它是兄弟姐妹)
    【解决方案2】:

    我的简化示例(id添加属性仅用于调试目的):

    <html>
        <body>
            <table id="0.custom-System-User.generatePassword">Table</table>
            <div>Foo</div>
            <div>Bar</div>
            <div>
                <div>
                    <div>
                        <img id="my-image" />
                    </div>
                </div>
            </div>
        </body>
    </html>
    

    Python 脚本:

    from selenium import webdriver
    browser = webdriver.Chrome()
    browser.get(URL)
    el = browser.find_element_by_xpath('//table[contains(@id, generatePassword)]/following-sibling::div[3]//img')
    el.get_attribute('id')
    

    输出:

    In [5]: el.get_attribute('id')
    Out[5]: u'my-image'
    

    xpath 选择器可能类似于 '//table[contains(@id, generatePassword)]/following-sibling::div[3]/div/div/img'

    【讨论】:

    • 如果我理解正确 - 您的代码假定 元素中的第三个 div 是父级的第三个 div 子级,但是不是这种情况。搜索应该是 id=0.custom-System-User.generatePassword 的 table 元素之后的第三个兄弟 div
    【解决方案3】:

    尝试以下 xpath:

     "//div[contains(@id, '1.custom-System-User.x-auto')]//img"
    

    如果不工作,能否请您展开所提供 HTML 的所有部分,因为我不知道那里到底有什么。

    【讨论】:

      【解决方案4】:

      假设会有三个div元素,你可以轻松使用xpath

      driver.findElement(By.xpath("//div[@class='x-form-item'][3]/div/div/img"))
      

      【讨论】:

      • xpath 搜索应该首先根据 id=0.custom-System-User.generatePassword 定位 table 元素,然后向下计数 3 个 div 兄弟并钻入第 3 个 div 直到到达 img。您的代码假定 中的第三个 div 是父项的第三个 div 子项
      • @Dror,感谢您指出我在回答时没有考虑到的表格
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      相关资源
      最近更新 更多