zoukankan      html  css  js  c++  java
  • 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返回最外层的表单

  • 相关阅读:
    [原]小巧的刀片
    [原]看康震教授讲《卖油翁》有感
    [原]使用可传输表空间修改Schema Name
    [原]ORA00060: Deadlock detected(场景1:单表并发更新)
    [原]使用wget/curl做个“小后门”
    [原]一个空格导致NFS的Readonly
    [转]设计高效SQL: 一种视觉的方法
    [原]6Gb/s SAS 2.0 通道的确不错
    ESX 4/VSphere CentOS 启动时 udev Hang 住
    [摘]终于找到一个有助理解left/right/full outer join的例子
  • 原文地址:https://www.cnblogs.com/minieye/p/5806138.html
Copyright © 2011-2022 走看看