页面操作的场景:进到到页面A,选择页面A里面的记录,点击签约, 弹出一个弹窗B,弹窗B的内容是协议及同意按钮或其他非同意的提示信息,主要的操作,打开页面A,点击签约,点击同意,操作完成

分析页面的组成,弹窗B在页面A里面,不过弹窗B是iframe,即嵌套在html页面里面的html,如果不做iframe切换,无法操作弹窗B里面的同意按钮,提示找不到元素,所以操作弹窗B里面的同意按钮前,要先切换到iframe,大致关系如下图:

切换到iframe的代码,EC.frame_to_be_available_and_switch_to_it(loc) 等待iframe出现,并切换到iframe

    def switch_iframe(self, loc, model):
'''
# html再嵌套了html,就需要先切换到iframe,才能对里面的元素进行操作
:param loc: 即iframe的元素属性
:param model:
:return:
'''
mylog.info("切换到模块{0}的_{1}iframe".format(model, loc))
WebDriverWait(self.driver, timeout=10).until(EC.frame_to_be_available_and_switch_to_it(loc))
 

完整的页面操作代码

    def sign(self, shopname):
'''
【签约操作】判断通联协议是否出现,已出现进入签约操作,签约操作是放在iframe里面,要切换到iframe,进行操作
签完一家店铺后,关闭弹窗,切换回,默认的html页面,进行下一次的签约操作
'''
# 同意通联协议的操作
res = self.wait_eleVisibility(loc=sf.xiey_tap, timeout=8, poll_frequency=0.2)
if res:
# 要切换到iframe进到这个页面进行操作
self.switch_iframe(loc=sf.agree_ifarme, model="切换到签约iframe")
try:
WebDriverWait(self.driver, timeout=8, poll_frequency=0.2).until(EC.visibility_of_element_located(sf.agreed_input))
self.scroll_into_view_and_click(loc=sf.agreed_input, model="点击同意协议")
mylog.info("{0}_点击同意协议".format(shopname))
except Exception as e:
# 过滤已经提交了签约记录的店铺,并记录店铺和具体的错误信息
flase_txt = self.get_element_text(loc=sf.user_not_exist, model="获取失败的提示")
mylog.exception("{0}_{1}_签约失败".format(shopname, flase_txt))
time.sleep(1)
# 切换回主界面
self.switch_default_content()
self.scroll_into_view_and_click(loc=sf.xiey_tap, model="移动到签约页面顶部")
self.scroll_into_view_and_click(loc=sf.close_alert, model="关闭通联弹框")
else:
mylog.exception("签约页面未出现")

切换回默认的html页面

    def switch_default_content(self):
'''
# 操作完iframe后,切换回默认的html页面,如果现在那一层的iframe,只需要执行一次,就可以返回到默认的html页面
:return:
'''
mylog.info("切换到默认的html页面")
self.driver.switch_to_default_content()

python selenium UI自动化操作iframe及返回默认页面的更多相关文章

  1. Selenium UI自动化解决iframe定位问题

      更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6735116.html 一个阴雨霏霏 ...

  2. 自动化测试系列:Selenium UI自动化解决iframe定位问题

      更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6735116.html 一个阴雨霏霏 ...

  3. python+selenium UI自动化不同浏览器之间的切换

    class register(): ROBOT_LIBRARY_SCOPE = 'GLOBAL' def __init__(self): pass # m默认打开chrome def open_bro ...

  4. Python实现浏览器自动化操作

    Python实现浏览器自动化操作 (2012-08-02 17:35:43) 转载▼     最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是 ...

  5. [转载]Python实现浏览器自动化操作

    原文地址:Python实现浏览器自动化操作作者:rayment   最近在研究网站自动登录的问题,涉及到需要实现浏览器自动化操作,网上有不少介绍,例如使用pamie,但是只是支持IE,而且项目也较久没 ...

  6. 使用appium+python做UI自动化的demo

    使用appium+python做UI自动化的demo 案例使用的知乎app,下载最新的知乎apk,存在了电脑上,只需要配置本机上app目录,不需要再配置appPackage和appActivity # ...

  7. python selenium 基本常用操作

    最近学习UI自动化,把一些常用的方法总结一下,方便自己以后查阅需要.因本人水平有限,有不对之处多多包涵!欢迎指正! 一.xpath模糊匹配定位元素 武林至尊,宝刀屠龙刀(xpath),倚天不出(css ...

  8. 使用python selenium进行自动化functional test

    Why Automation Testing 现在似乎大家都一致认同一个项目应该有足够多的测试来保证功能的正常运作,而且这些此处的‘测试’特指自动化测试:并且大多数人会认为如果还有哪个项目依然采用人工 ...

  9. python+ selenium&APPium自动化 page Object 设计模式

    题记: 之前公司项目比较稳定, 在进行了系统测试,想用自动化测试进行冒烟测试,或者对主要功能进行测试, 因此用到了PO模式 因此做个记录: Page Object Page Object模式是使用Se ...

  10. python selenium鼠标键盘操作(ActionChains)

    用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击.双击.点击鼠标右键.拖拽等等.而selenium给我们提供了一个类来处理这类事件--ActionChains sele ...

随机推荐

  1. WPF 通过 RawInput 获取触摸消息

    触摸在 Windows 下属于比较特殊的输入,不同于键盘和鼠标,键盘和鼠标可以通过全局 Hook 的方式获取到鼠标和键盘的输入消息.而触摸则没有直接的 Hook 的方法.如果期望自己的应用,可以在没有 ...

  2. SemanticFunction 自然语言函数

    本文将和大家介绍 LLM 的魔法,通过自然语言编程的方式开发 SemanticFunction 函数 大家都知道,编程里面的函数可以是一个完成某个功能的逻辑片段,绝大部分的函数都需要使用人类不友好的编 ...

  3. JavaScript函数属性,方法,ES6拓展内容总结(箭头函数使用,rest参数)

    引言 函数在js中也是一个对象,所以它也是有着自己的属性和方法的,了解它们能更好的使用函数. // 各种样子的函数 function foo() {} function foo(a) {} funct ...

  4. DE10-Lite输入/出高/低电平说明

    DE10-Lite输入/出高/低电平说明 DE10-Lite实验板上有一些设备可以输入/出高/低电平,说明如下: HEX 7-segment LED displays (active low)共阳极 ...

  5. XYCTF pwn部分题解 (部分题目详解)

    hello_world(签到) 思路: 这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shell wp: invisible_flag 思 ...

  6. JDK源码阅读-------自学笔记(二十二)(java.util.ArrayList自定义晋级,ArrayList实战详解)

    简介(Introduction)   上篇文章主要介绍了ArrayList自行模仿建立的方式,那么,其实这个类不是一次性就那么完美的,现在做一个一步步变成那样完整的ArrayList的版本升级测试. ...

  7. Git 合并冲突

    目录 文章目录 目录 合并冲突 合并分支 合并最近的两次提交 合并冲突 步骤: git status 找到冲突的文件 将冲突去除 将冲突文件重新加入临时区 git add egis/api/v1/ro ...

  8. 鸿蒙HarmonyOS实战-Stage模型(AbilityStage组件容器)

    前言 组件容器是一种用于管理和组织组件的工具或环境.它可以提供一些基本的功能,如组件的注册.创建.销毁和查找.组件容器通常会维护一个组件的依赖关系,并负责将这些依赖注入到组件中.它还可以提供一些其他的 ...

  9. C# 使用 NPOI 导出excel 单击单元格背景变黑色的解决办法

    需要手动指定单元格的背景色为一种颜色, 特别注意,我在使用 var color=new XSSFColor(new color...)创建的颜色,即使设置成其他颜色,查看样式属性中,发现color.i ...

  10. Vue cli使用Element UI

    当前的测试环境如下: ---- 新版的@vue/cli ---- Vue2.x版本 第一步:安装Element UI npm i element-ui -S 第二步:引入Element UI 在mai ...