Selenium-python 之 frame定位元素
定位元素时经常会出现定位不到元素,这时候我们需要观察标签的上下文,一般情况下这些定位不到的元素存放在了frame或者放到窗口了,只要我们切入进去就可以很容易定位到元素。
处理frame时主要使用到switch_to.frame()(切入frame也可以些写成switch_to_frame,不过这个已经用的很少了)和switch_to_default_content()两个方法,一个主要是切入到iframe里面,一个是切换到主文档中,一般情况这两个要配合着用,切进去以后操作完成元素以后,就要在切回到主文档,避免一些其他的错误。
switch_to.frame() #如果frame 中有name和id属性就直接使用id或者name进行定位,如果没有id和name属性,可以通过find_element_by_xpath(或者其他定位)方法定位到这个iframe元素,然后把这个元素传进去。
当有两个frame时,需要先进入父frame,再进入子frame中,对子frame中的元素操作后,需要先切回到父frame中,再回到最外面的主文档区域。
代码举例:
以禅道测试人员登录后进行确认BUG为例
#进入BUG详情页后进入确认BUG页面
driver.find_element(By.XPATH,"//a[contains(@href,'/zentao/bug-confirmBug')]").click()
confirm_iframe=driver.find_element(By.XPATH,"//iframe[@id='iframe-triggerModal']") #定义一个确认BUG的frame元素对象
driver.switch_to.frame(confirm_iframe) #进入frame
time.sleep(1)
driver.find_element(By.XPATH,"//div[@id='assignedTo_chosen']").click() ##对frame中的元素操作,此处操作下拉框
driver.find_element(By.XPATH,"//li[@title='K:开发001']").click() #下拉框输入值
beizhu_iframe=driver.find_element(By.XPATH,"//iframe[@class='ke-edit-iframe']") ##进入备注子frame中,再定义一个frame对象
driver.switch_to.frame(beizhu_iframe) #进入子frame
driver.find_element(By.XPATH,"//body[@class='article-content']").send_keys("确认问题") #对子frame的元素进行操作
driver.switch_to.parent_frame() #切出子frame,回到父frame,才能对父frame上的元素再次操作
driver.find_element(By.XPATH,"//button[@type='submit'][@class='btn btn-wide btn-primary']").click() #对父frame上的元素进行操作
time.sleep(2)
driver.switch_to.default_content() ##跳出父iframe,回到最外面的HTML
time.sleep(2)
##禅道退出,对主文档上的元素进行操作
driver.maximize_window()
driver.find_element(By.XPATH, "//span[@class='user-name']").click()
driver.find_element(By.XPATH, "//div[1]/div/div/div/ul/li/ul/li[13]/a").click()
time.sleep(1)
Selenium-python 之 frame定位元素的更多相关文章
- Python selenium PO By.XPATH定位元素报错
Python selenium PO By.XPATH定位元素报错 如下代码经常报错: # 首页的“新建投放计划”按钮 new_ads_plan = (By.XPATH, "//*[tex ...
- 【转载】【selenium+Python WebDriver】之元素定位
总结: 感谢: “煜妃”<Selenuim+Python之元素定位总结及实例说明> “Huilaojia123”<selenium WebDriver定位元素学习总结> “上海 ...
- selenium中的webdriver定位元素失败的常见原因
自动化测试中经常会出现无法定位元素的情况,报selenium.common.exceptions.NoSuchElementException错误 Frame/Iframe原因定位不到元素: 这个是最 ...
- selenium切换窗口后定位元素出现问题的解决方案
在做UI自动化的过程中,有时需要由一个窗口跳转到另一个窗口,这时直接去定位页面元素,可能会出现问题,这时,我们需要将driver与新的窗口进行绑定. 完整代码如下:(python版) #coding= ...
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- Selenium3+python几种定位元素的方法
学习小结: 这里使用ChromeV73+web driver 2.46 #几种定位方式: #Autotest.py from selenium import webdriver from seleni ...
- 【转】【selenium+Python WebDriver】之元素定位不到解决办法
感谢: 煜妃的<Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)> ClassName定位报错问题:<[Python] ...
- selenium python (二) 元素定位方法
定位的原则就是:id name class 优先,强烈建议和前端哥哥搞好关系.定位就不是问题:实在不行就xpath和css大部分偶可以定位到. webdriver定位的方法是通过一个By类,By类中有 ...
- python selenium框架的Xpath定位元素
我们工作中经常用到的定位方式有八大种:id name class_name tag_name link_text partial_link_text xpath css_selector 本篇内容主要 ...
随机推荐
- R3获取kernel32地址
获取Kernel32地址 如果是搞PE变形或者PE重构,再或者代码注入,很多时候我们要动态获取Loadlibrary()以及GetPeocAddress()两个函数的地址,通过这两个函数再动态获取其他 ...
- React-组合模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- (Py练习)判断能被几个9整除
# 输入一个奇数,判断最少几个9除以该数的结果为整数 # 999999 / 13 = 76923 if __name__ == '__main__': zi = int(input("输入一 ...
- 使用jenkins一键打包发布vue项目
jenkins的安装 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立 ...
- hdu 2072 1106学一波字符串分割,C语言与C++两种方法
hdu2072:题意:输出给定字符串中的单词数(一个句子中可能有两个相同的单词),这里的思想是把每个单词取出来,放入set(这个集合容器中不允许有相同的元素)中,最后输出该集合的大小即可. 现在的问题 ...
- windows性能计数器搜集方法
windows性能计数器搜集方法 PerfMon-Windows性能监视器是个好东西,可以辅助我们分析发生问题时间段服务器资源占用情况,但是部署性能计数器确实一个相当麻烦的事情,往往这种枯燥的事别人还 ...
- java集合-哈希表HashTable
一.简介 HashTable也是一种key-value结构,key-value不允许null,并且这个类的几乎全部的方法都加上了synchronized锁,来保证并发安全,由于加了锁所以性能方面会比较 ...
- 『动善时』JMeter基础 — 23、JMeter中使用“用户自定义变量”实现参数化
目录 1.用户自定义变量介绍 2.使用"用户自定义变量"实现参数化 (1)测试计划内包含的元件 (2)数据文件内容 (3)测试计划界面内容 (4)线程组元件内容 (5)CSV数据文 ...
- [刷题] 17 Letter Combinations of a Phone Number
要求 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合 1 不对应任何字母 示例 输入:"23" 输出:["ad", "ae&q ...
- 014.Ansible Playbook Role 及调试
一 role 简介 在ansible中,role是将playbook分割为多个文件的主要机制,大大简化了复杂的playbook的编写,同时已与复用 role各个目录的作用及可用文件 files:存放由 ...