zoukankan      html  css  js  c++  java
  • selenium-元素无法定位解决办法

    selenium-元素无法定位解决办法

     

    有时会出现元素定位失败的情况,以百度首页为例,定位输入框,报错如下:

    selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id='wd']

    报错提示没有该元素,无法定位!

    此处列举几个常见的,元素无法定位的情况,简单级。

     

    1.属性名称与属性填写错误

    因为操作时,为了提高效率或者说偷懒,经常将已写好同类命令的代码,复制粘贴,用于新的命令,有时就忘了修改,比如上一个元素定位是用 id ,这一次定位是用 name('wd'),复制粘贴后,find_element_by_id('wd'),于是定位失败。

     

    2.点击速度过快,页面还没加载出来就点击页面上元素

    打开一个新的页面时,可能页面还没加载出来,此时已经进行下一步操作,元素定位,于是报错。

    此时需要设置等待时间

    import time

    time.sleep(2)  #强制固定等待2秒

     

    3.动态 id 无法定位元素

    比如淘宝web端登录,账号输入框,id就是动态的,每次打开都不同。

    此时可以使用 css 定位或 xpath 定位

     

    4.元素在 iframe 里导致元素定位失败

    当元素在 frame 里,此时打开网页直接使用 id/name/xpath 是无法定位元素的。

    以qq邮箱web端登录的账号输入框为例,查看元素显示是这样的……

    ……

      <iframe id="login_frame" name="login_frame" ……>

        ……

          <input type="text" class="inputstyle" id="u" name="u" value="" tabindex="1">

    因为这个输入框在 iframe id="login_frame" 这个frame 里,此时直接 ele = browser.find_element_by_name('u') 会显示定位失败。

    需要先定位frame,再定位里面的元素。

    browser.switch_to.frame('login_frame')

    browser.find_element_by_name('u')

    切记,在 frame 操作完成后,要切换出去

    driver.switch_to.default_content()

     

    5.不在同一个 frame 里

    有时,一个页面内有多个 frame,于是,比如左边有一栏left_frame,右边还有一栏right_frame,当你在某个frame里,就无法直接定位其他frame里的元素。

    比如,打开页面后,需要定位左栏的元素:

    browser.switch_to.frame('left_frame')  #切换进入左栏

    browser.find_element_by_name('u')  #此时只能定位左栏的元素

     

    但是之后又需要定位右栏的元素:

    driver.switch_to.default_content()  #回到默认的content,此时只能定位页面上非frame内的元素

    driver.switch_to.frame('right_frame')  #切换进入右栏

    browser.find_element_by_name('u')  #此时只能定位右栏的元素

     

    最后回到默认content,就可以回到页面默认内容,继续操作了:

    driver.switch_to.default_content()

     
     
  • 相关阅读:
    postgresql 简单入门
    自用 docker-compose
    前后端分离 开发环境通过CORS实现跨域联调
    导出 java.io.IOException: 权限不够
    mysql 数值与字符类型 长度梳理
    easyui input未设id导致的问题
    springmvc处理url请求步骤
    js中的变量提升(hoisting)
    auto semicolon insertion 自动分号补齐的坑
    $.ajax dataType设置为json 回调函数不执行
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/12928455.html
Copyright © 2011-2022 走看看