• webdriver--定位一组元素+iframe表单切换


    • 定位一组元素:find_elements,返回的是list,所以可以用列表的索引对列表里的某个元素操作,也可以用for循环访问list,依次操作各元素
      driver.find_elements_by_name("OpenType")[1].click()#公开类型
      #推送范围
      for push in driver.find_elements_by_name("GroupName"):
          push.click()
          time.sleep(1)

      定位一组元素时,形成的是list,所以list的相关语法都可以使用,切片、添加、删除、遍历都可以

    • iframe表单切换

      最开始接触到这个iframe切换的契机是,当时页面有个弹窗,按照网上查找到的弹窗处理方式,获取句柄,然后切到该弹窗,再定位弹窗内的元素。但是怎么都无法成功,定位不到弹窗里的元素。后来问开发,看了看前端代码,原来这个弹窗不是window窗口,而是iframe表单嵌套页面,所以执行出错。webdriver只能在一个页面上对元素识别和定位,对frame/iframe表单内嵌页面的元素无法直接定位,所以也是需要通过swtich_to.frame()将当前定位的主题切换到表单内,表单处理完,还需要再切回原主体,才能再继续操作原主体的元素。所以啊,还是需要对前端了解熟悉才行,需要学习的更多了。。。

    这段就是当时碰到的iframe嵌套的弹窗

      #课程基础知识页的章节选择
    1
    driver.find_element_by_id("menuled").click() 2 driver.switch_to.frame("layui-layer-iframe1")#刚好id唯一,用id定位 3 driver.find_elements_by_class_name("ico-round")[0].click()#选择某个章节 4 driver.find_element_by_class_name("u-btn-clagre").click() 5 driver.switch_to.default_content()#返回基础页

    这段是页面的一个富文本的控件,用iframe嵌套的

       #检测任务维护页面
    1
    driver.get("http://www.zgckxt.com/THome/PC_SelfLearn/Index?id=1056&type=1") 2 driver.find_element_by_css_selector("div.m-ico>a.marr20>i.ico-queedit").click() 3 time.sleep(5) 4 driver.find_element_by_css_selector("#sinquestion").click()#选择检测任务:单选题 5 time.sleep(5)#选择题型后,题干和选项会有个加载时间,所以需要设置页面等待时间 6 list = driver.find_elements_by_css_selector(".cke_wysiwyg_frame")#从学习任务到检测任务的解析,一共7个这种iframe嵌套的控件 7 #del list[0] 8 list.pop(0)#去掉学习任务 9 list.pop()#去掉题目解析 10 n = 0 11 for qframe in list: 12 if n == 0: 13 driver.switch_to.frame(qframe) 14 driver.find_element_by_css_selector(".cke_editable").send_keys("单选题题干") 15 driver.switch_to.default_content() 16 js = "window.scrollTo(document.documentElement.scrollTop,document.documentElement.scrollLeft+600);" 17 driver.execute_script(js) 18 else: 19 driver.switch_to.frame(qframe) 20 driver.find_element_by_css_selector(".cke_editable").send_keys("单选题选项%d"% n) 21 driver.switch_to.default_content() 22 n = n + 1 23 driver.find_element_by_xpath(".//*[@id='rightbox']/div[4]/div[2]/a[2]").click() 24 time.sleep(3)

    可以用switch_to.parent_content()方法跳出当前表单,返回上一级,default_content返回最外层的表单

  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/minieye/p/5806138.html
Copyright © 2020-2023  润新知