51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2412|回复: 3
打印 上一主题 下一主题

[求助] selenium comboTree 动态加载树里的项怎么定位

[复制链接]
  • TA的每日心情
    擦汗
    2016-12-20 19:03
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2016-3-29 20:40:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 bjj1985 于 2016-4-1 08:09 编辑

    如图1里的,我想选北京市-市辖区下面的东城区,应该怎么实现

    我自己解决了,贴一下
    public String selectDepartmentForAddEmployee(WebDriver driver) {
                    // 点击了一级部门
                    int num1 = getElements(driver, By.xpath("//li[@level='1']"));
                    // logD("一级部门有:" + num1 + "个");

                    int rDemt = getIndex(num1) / 2 + 1;
                    driver.findElement(By.cssSelector("#dName")).click();
                    delay(500);
                    // 点击第一层
                    String xpath = String.format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/li[%d]/i[1]",
                                    rDemt);
                    String xpath_1 = String.format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/li[%d]",
                                    rDemt);
                    // logD("一级菜单的地址为: 【" + rDemt + "】【" + xpath + "】");
                    clickByxpath(driver, xpath, 500);
                    // check 第二层是否存在,如果不存在则返回
                    int num2 = getElements(driver, By.xpath("//li[@level='2']"));
                    // logD("二级部门有:" + num2 + "个");
                    if (num2 > 0) {
                            int rDemt2 = getIndex(num2) + 1;
                            String xpath2 = String
                                            .format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/li[%d]/i[1]", rDemt2);
                            String xpath2_1 = String
                                            .format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/li[%d]", rDemt2);
                            // logD("二级菜单的地址为: 【" + rDemt2 + "】【" + xpath2 + "】");
                            clickByxpath(driver, xpath2, 500);
                            // check 第三层是否存在,如果不存在则返回
                            int num3 = getElements(driver, By.xpath("//li[@level='3']"));
                            // logD("三级部门有:" + num3 + "个");
                            if (num3 > 0) {
                                    int rDemt3 = getIndex(num3) + 1;
                                    String xpath3 = String.format(
                                                    "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/li[%d]/i[1]", rDemt3);
                                    String xpath3_1 = String.format(
                                                    "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/li[%d]", rDemt3);
                                    // logD("三级菜单的地址为: 【" + rDemt3 + "】【" + xpath3 + "】");
                                    clickByxpath(driver, xpath3, 500);
                                    // check 第四层是否存在,如果不存在则返回
                                    int num4 = getElements(driver, By.xpath("//li[@level='4']"));
                                    // logD("四级部门有:" + num4 + "个");
                                    if (num4 > 0) {
                                            int rDemt4 = getIndex(num4) + 1;
                                            String xpath4 = String.format(
                                                            "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/ul/li[%d]/i[1]",
                                                            rDemt4);
                                            String xpath4_1 = String.format(
                                                            "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/ul/li[%d]",
                                                            rDemt4);
                                            // logD("四级菜单的地址为: 【" + rDemt4 + "】【" + xpath4 + "】");
                                            clickByxpath(driver, xpath4, 500);
                                            // check 第五层是否存在,如果不存在则返回
                                            int num5 = getElements(driver, By.xpath("//li[@level='5']"));
                                            // logD("五级部门有:" + num5 + "个");
                                            if (num5 > 0) {
                                                    int rDemt5 = getIndex(num5) + 1;
                                                    String xpath5 = String.format(
                                                                    "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/ul/ul/li[%d]/i[1]",
                                                                    rDemt5);
                                                    // logD("五级菜单的地址为: 【" + rDemt5 + "】【" + xpath5 + "】");
                                                    clickByxpath(driver, xpath5, 500);
                                            } else {
                                                    logD("【四级部门:     " + getText(driver, By.xpath(xpath4_1), "data-text") + "】");
                                                    return getText(driver, By.xpath(xpath4_1), "data-text");
                                            }
                                    } else {
                                            logD("【三级部门:     " + getText(driver, By.xpath(xpath3_1), "data-text") + "】");
                                            return getText(driver, By.xpath(xpath3_1), "data-text");
                                    }
                            } else {
                                    logD("【二级部门:     " + getText(driver, By.xpath(xpath2_1), "data-text") + "】");
                                    return getText(driver, By.xpath(xpath2_1), "data-text");
                            }
                    } else {
                            logD("【一级部门:     " + getText(driver, By.xpath(xpath_1), "data-text") + "】");
                            return getText(driver, By.xpath(xpath_1), "data-text");
                    }
                    return null;
            }

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-8-29 22:04
  • 签到天数: 1122 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2016-3-30 10:11:39 | 只看该作者
    谷歌或者火狐浏览器,直接右键,点击审查,找到东城区,右键-copy xpath或者copy selector.这是自动获取的;当然你也可以手动去获取

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-20 19:03
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]测试连长

    3#
     楼主| 发表于 2016-3-30 16:19:51 | 只看该作者
    wuxi88 发表于 2016-3-30 10:11
    谷歌或者火狐浏览器,直接右键,点击审查,找到东城区,右键-copy xpath或者copy selector.这是自动获取的 ...

    这我知道的,这个是动态获取的,只有点了北京后,才会显示市辖区和县,这是动态获取的。我现在能想到的就是点一下后去获取一下,看有没有东西,但是这个方法不好写,这个xpath的地址是一直在变的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-20 19:03
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]测试连长

    4#
     楼主| 发表于 2016-4-1 08:07:42 | 只看该作者
    public String selectDepartmentForAddEmployee(WebDriver driver) {
                    // 点击了一级部门
                    int num1 = getElements(driver, By.xpath("//li[@level='1']"));
                    // logD("一级部门有:" + num1 + "个");

                    int rDemt = getIndex(num1) / 2 + 1;
                    driver.findElement(By.cssSelector("#dName")).click();
                    delay(500);
                    // 点击第一层
                    String xpath = String.format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/li[%d]/i[1]",
                                    rDemt);
                    String xpath_1 = String.format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/li[%d]",
                                    rDemt);
                    // logD("一级菜单的地址为: 【" + rDemt + "】【" + xpath + "】");
                    clickByxpath(driver, xpath, 500);
                    // check 第二层是否存在,如果不存在则返回
                    int num2 = getElements(driver, By.xpath("//li[@level='2']"));
                    // logD("二级部门有:" + num2 + "个");
                    if (num2 > 0) {
                            int rDemt2 = getIndex(num2) + 1;
                            String xpath2 = String
                                            .format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/li[%d]/i[1]", rDemt2);
                            String xpath2_1 = String
                                            .format("//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/li[%d]", rDemt2);
                            // logD("二级菜单的地址为: 【" + rDemt2 + "】【" + xpath2 + "】");
                            clickByxpath(driver, xpath2, 500);
                            // check 第三层是否存在,如果不存在则返回
                            int num3 = getElements(driver, By.xpath("//li[@level='3']"));
                            // logD("三级部门有:" + num3 + "个");
                            if (num3 > 0) {
                                    int rDemt3 = getIndex(num3) + 1;
                                    String xpath3 = String.format(
                                                    "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/li[%d]/i[1]", rDemt3);
                                    String xpath3_1 = String.format(
                                                    "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/li[%d]", rDemt3);
                                    // logD("三级菜单的地址为: 【" + rDemt3 + "】【" + xpath3 + "】");
                                    clickByxpath(driver, xpath3, 500);
                                    // check 第四层是否存在,如果不存在则返回
                                    int num4 = getElements(driver, By.xpath("//li[@level='4']"));
                                    // logD("四级部门有:" + num4 + "个");
                                    if (num4 > 0) {
                                            int rDemt4 = getIndex(num4) + 1;
                                            String xpath4 = String.format(
                                                            "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/ul/li[%d]/i[1]",
                                                            rDemt4);
                                            String xpath4_1 = String.format(
                                                            "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/ul/li[%d]",
                                                            rDemt4);
                                            // logD("四级菜单的地址为: 【" + rDemt4 + "】【" + xpath4 + "】");
                                            clickByxpath(driver, xpath4, 500);
                                            // check 第五层是否存在,如果不存在则返回
                                            int num5 = getElements(driver, By.xpath("//li[@level='5']"));
                                            // logD("五级部门有:" + num5 + "个");
                                            if (num5 > 0) {
                                                    int rDemt5 = getIndex(num5) + 1;
                                                    String xpath5 = String.format(
                                                                    "//*[@id='userModal']/form/div/div/div[2]/div/div[3]/div/div/ul/ul/ul/ul/ul/ul/li[%d]/i[1]",
                                                                    rDemt5);
                                                    // logD("五级菜单的地址为: 【" + rDemt5 + "】【" + xpath5 + "】");
                                                    clickByxpath(driver, xpath5, 500);
                                            } else {
                                                    logD("【四级部门:     " + getText(driver, By.xpath(xpath4_1), "data-text") + "】");
                                                    return getText(driver, By.xpath(xpath4_1), "data-text");
                                            }
                                    } else {
                                            logD("【三级部门:     " + getText(driver, By.xpath(xpath3_1), "data-text") + "】");
                                            return getText(driver, By.xpath(xpath3_1), "data-text");
                                    }
                            } else {
                                    logD("【二级部门:     " + getText(driver, By.xpath(xpath2_1), "data-text") + "】");
                                    return getText(driver, By.xpath(xpath2_1), "data-text");
                            }
                    } else {
                            logD("【一级部门:     " + getText(driver, By.xpath(xpath_1), "data-text") + "】");
                            return getText(driver, By.xpath(xpath_1), "data-text");
                    }
                    return null;
            }

    这是我自己想到的方法,该方法有一个缺点,每次都要刷新一下网页,不然后会出现。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-28 02:04 , Processed in 0.067369 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表