本帖最后由 璐璐 于 2019-10-17 16:39 编辑
: 老师 网页的元素是以li的形式,我用了各种方法都定位不到这个元素?
:
selenium元素定位不了,9种方式处理: 1、frame/iframe表单嵌套 解决方法:driver.switch_to.frame(id/name/obj)。 2、页面跳转到新的标签页,或者弹出的警告框等 解决方法1:driver.switch_to.window(window_handle)切换到新窗口。 3三、页面元素失去焦点导致脚本运行不稳定 解决方法:driver.switch_to.active_element 4四、使用Xpath或CSS定位 find_element_by_xpath("//标签[属性='值']") 5、页面还没有加载出来,就对页面上的元素进行的操作 因为加载元素延时造成的脚本失败,我们可以通过设置等待时间来提升自动化脚本的稳定性。解决方法1:WebDriverWait() 显示等待 6、元素被遮挡,不可用,不可见 解决方法1:driver.maximize_window() 由于窗口大小改变引起的页面元素布局发生变化,被测元素被遮挡,可以先将窗口最大化,再进行元素定位。 解决方法2:.is_enabled() 由于业务原因元素在某些情况下不可用(元素属性disabled,灰显),首先检查测试步骤是否符合业务逻辑,其次确认是否为业务流程上的Bug。 7、使用WebDriver调用JavaScript代码代替无法实现的功能 对于有些WebDriver没有提供的方法或者无法实现的功能,WebDriver提供了driver.execute_script() 8、WebDriver无法操作Windows控件 文件的普通上传和下载(参考How to auto save files using custom Firefox profile ?),可以通过.send_keys('本地路径')和find_element_by_partial_link_text('下载链接名').click()实现。 解决方法:对于插件上传,需要操作Windows控件的,可以通过安装AutoIt工具、编写脚本、保存为“.au3”文件、转换成“.exe”文件,再由自动化脚本os.system("D:\\upfile.exe")实现上传/下载。 9、资源是通过JavaScript加载的情况 如果这9种都不行,那就有可能非标准html组件 selenium 放弃定位。 :好的,谢谢老师,我看一下。
|