51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1745|回复: 4
打印 上一主题 下一主题

新人求教selenium 的定位逻辑

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2015-10-22 14:37:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近新学的selenium+python,在firefox上安装了IDE ,录制了登陆和点击页面的操作。录制完成之后回放,正常完成。导出为python的webdriver脚本,运行脚本却提示找不到元素。
页面的代码截图如下:如图所示两个箭头处,第一个箭头div下面的按钮可以搜索到并且点击。但是第二个箭头的div下面的选中区域(最下方)的addButton元素,在脚本中无法选中。

我的生成的脚本是这样的:
  1. def test_c_s_yquery(self):
  2.         driver = self.driver
  3.         driver.get(self.base_url + "/PDDM/user!login.action")
  4.         driver.find_element_by_id("username").clear()
  5.         driver.find_element_by_id("username").send_keys("D4760")
  6.         driver.find_element_by_id("password").clear()
  7.         driver.find_element_by_id("password").send_keys("123456")
  8.         driver.find_element_by_css_selector("img").click()
  9.         driver.find_element_by_id("aLink30").click()
  10.         time.sleep(10)
  11.         driver.find_element_by_id("aLinkcustomMenu147").click()
  12.         # ERROR: Caught exception [ERROR: Unsupported command [selectWindow | name=Iframe | ]]
  13.         driver.find_element_by_id("addButton").click()   ---------------------------找按钮的操作在这一行
  14.         driver.find_element_by_id("button5").click()
  15.         # ERROR: Caught exception [ERROR: Unsupported command [selectWindow | name=Iframe | ]]
  16.         driver.find_element_by_id("query_name").clear()
  17.         driver.find_element_by_id("query_name").send_keys(u"cs")
  18.         driver.find_element_by_id("button5").click()
  19.         Select(driver.find_element_by_id("product_line")).select_by_visible_text(u"计费")
  20.         driver.find_element_by_id("myRelatBug0").click()
  21.         driver.find_element_by_id("button5").click()
  22.         time.sleep(10)
复制代码
报错信息如下:
raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"addButton"}


根据报错信息可以看出是找不到addButton 这个,想请教各位大神的是:
1.find_element 函数是如何工作的,如何能保证在一个页面中找到指定的元素。
2.为什么图中第一个div下的元可以找到,而第二个不能找到。是不是需要一个切换操作,进行一个类似于模块的选中之后,才能找到其下的元素。

承蒙各位老师指教,
小可感激不尽,谢谢。

本帖子中包含更多资源

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

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

使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    2#
    发表于 2015-10-22 14:51:15 | 只看该作者
    多窗口了,你需要switch的就是你代码中每次都注释掉的  # ERROR: Caught exception [ERROR: Unsupported command [selectWindow | name=Iframe | ]]
    你需要自己添加switch的代码实现
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2015-10-22 15:14:10 | 只看该作者
    joykao 发表于 2015-10-22 14:51
    多窗口了,你需要switch的就是你代码中每次都注释掉的  # ERROR: Caught exception [ERROR: Unsupported co ...

    谢谢老师,我试试。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2015-10-22 15:27:24 | 只看该作者
    joykao 发表于 2015-10-22 14:51
    多窗口了,你需要switch的就是你代码中每次都注释掉的  # ERROR: Caught exception [ERROR: Unsupported co ...

    我添加了driver.switch_to_frame("Iframe")  之后,就可以找到了,谢谢您。
    还想请教一下,这几个定位函数他的实际实现是咋回事,我看他的实现里面好像是commond()方法,再往下我就看不懂了。
    还有比如我这个例子,查找函数find_element() 是如何确定查找范围的?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    5#
    发表于 2015-10-22 18:04:52 | 只看该作者
    平潭发展 发表于 2015-10-22 15:27
    我添加了driver.switch_to_frame("Iframe")  之后,就可以找到了,谢谢您。
    还想请教一下,这几个定位函 ...

    这个建议你看一下selenium的原理和类库
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-27 11:49 , Processed in 0.074614 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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