刚接触Selenium,在调试过程中发现有些元素定位不到,于是求助了百度,查找到的资料是这么说的:如果需要定位的元素在某个frame里,则单独通过id/name/xpath是定位不到此元素的。比如,原本想通过WebElement element=driver.FindElement(By.LinkText("XXX"));来定位元素的,但由于该元素在iframe. id="left_frame"这个frame里面,所以需要先定位frame,WebElement element=driver.SwitchTo().Frame("left_frame").FindElement(By.LinkText("XXX"));

  此外还有个问题,就是相关的操作是在不同的frame中定位元素的。比如,先在left_frame中定位元素Id=TestFor1,然后在right_frame中定位元素Id=TestFor2。这种情况下,先切到left_frame,driver.SwitchTo().Frame("left_frame");再定位元素TestFor1,driver.FindElement(By.Id("TestFor1"));再切到默认的content,driver.SwitchTo().DefaultContent();再切到right_frame,driver.SwitchTo().Frame("right_frame");再定位元素TestFor2,driver.FindElement(By.Id("TestFor2"));
  在实际应用中,该方法能解决元素无法定位的问题,写了个C#通用接口(不管元素是否在frame里面),如下:
  publicIWebElementGetElement(stringstrDefined,boolbFrame.=false)
  {
  try
  {
  // 如果元素不在frame中,则切到默认的content
  if(!bFrame)
  {
  _webDriver.SwitchTo().DefaultContent();
  }
  IWebElementele=null;
  stringstrFrame.=m_cc.GetElementFrame(strDefined);
  // 如果元素在frame里,先切到frame
  if(null!=strFrame.&&""!=strFrame)
  {
  IWebElementFrameEle=GetElement(strFrame,true);
  _webDriver.SwitchTo().Frame(FrameEle);
  }
  stringstrID=m_cc.GetElementID(strDefined);
  // 如果元素的ID为空,则通过XPath来定位元素
  if(""==strID)
  {
  stringstrXPath=m_cc.GetElementXPath(strDefined);
  else=_webDriver.FindElement(By.XPath(strXPath));
  }
  else
  }
  }
版权声明:本文出自 xiaobaiwdn 的51Testing软件测试博客:http://www.51testing.com/?367232
原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

Selenium定位不到元素的解决方法—iframe挡住了去路的更多相关文章

  1. Python3 Selenium定位不到元素常见原因及解决办法

    Python3 Selenium定位不到元素常见原因及解决办法 一.问题描述 在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况: 报错信息: no such e ...

  2. selenium定位不到元素

    selenium定位不到元素时,网上大部分查到都是iFrame的切换问题,然后是多窗口.句柄的处理问题, 在初学是遇到定位不到元素,一直在找上面的问题,发现都不是上面的问题, 后来才发现是页面刷新的问 ...

  3. 关于selenium无法定位动态元素的解决方法

    今天在写一个关于登录的自动化脚本时,在对元素定位时总会报下面的错:

  4. Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

         在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException ...

  5. Selenium定位一 --单个元素定位方法

    Selenium-Webdriver 提供了强大的元素定位方法,支持以下三种方法. 单个对象的定位方法 多个对象的定位方法 层级定位 定位单个元素在定位单个元素时,selenium-webdriver ...

  6. Python+selenium学习(二) selenium 定位不到元素

    转载:https://www.cnblogs.com/tarrying/p/9681991.html tarrying selenium的三种等待时间 //隐式等待(20秒以内没哥一段时间就会去找元素 ...

  7. Selenium(二):选择元素的基本方法

    1. 选择元素的基本方法 对于百度搜索页面,如果我们想自动化输入爱编程的小灰灰,怎么做呢? 这就是在网页中,操控界面元素. web界面自动化,要操控元素,首先需要选择界面元素 ,或者说定位界面元素 就 ...

  8. 为什么selenium定位不到元素

    在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况,一般可以从以下几个方面着手解决: 1.Frame/Iframe原因定位不到元素: 这个是最常见的原因,首先要理 ...

  9. js鼠标移入移出事件会被子元素触发解决方法

    问题:js写了一个鼠标移入移出事件,但是发现会被内部子元素不断的触发 解决方法:建立一个空的div定位到需要触发的位置,然后设置大小和触发范围一样,最后将事件写在空的div上.

随机推荐

  1. ubuntu16.04+cuda9+cudnn7+tensorflow+pycharm环境搭建

    安装环境:ubuntu16.04+cuda9+cudnn7+tensorflow+pycharm 1)前期搭建过程主要是按照这篇博文,对于版本选择,安装步骤都讲得很详细,亲测有效! https://b ...

  2. input输入框自动获取焦点

    只要在该input标签后添加autofocus="autofocus"即可 代码实例: <html> <head></head> <bod ...

  3. 关于FlexBox的布局

    关于FlexBox的布局 基本要素 因为FlexBox是一整个模块并不是一个单独的属性,它涉及到很多东西包括它的所有设置属性.一些属性是需要被设置在容器(父级元素,称为『弹性容器』),而一些其他的属性 ...

  4. webserver Etcd Cluster / CoreOS etcd / macOS etcd

    s https://coreos.com/etcd/ https://coreos.com/etcd/docs/latest/ macOS mojave etcd 003deMac-mini:~ ma ...

  5. JavaScript 基本包装类型,包装对象

    前言 javascript对象是一种复合值,它是属性或已命名值的集合.通过'.'符号来引用属性值.当属性值是一个函数时,称其为方法.通过o.m()来调用对象o中的方法.我们发现,字符串也同样具有属性和 ...

  6. XSS攻击常识及常见的XSS攻击脚本汇总

    一.什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 这里我们主要注 ...

  7. C++自定义String字符串类,支持子串搜索

    C++自定义String字符串类 实现了各种基本操作,包括重载+号实现String的拼接 findSubStr函数,也就是寻找目标串在String中的位置,用到了KMP字符串搜索算法. #includ ...

  8. shiro登录认证

    新建maven文件create a simple project shiro.ini文件 [users] root=123456 log4j.properties log4j.rootLogger=I ...

  9. Java z 404

    problem: relative 与absolute 绝对和相对定位 为什么缩放页面里会有离开的情况 为什么a链接里与文字无法对齐 这么多代码为什么没有最好 用最简单的代码去执行一个相应的命令 实现 ...

  10. 获取多<a/>标签id值的点击事件

    <li> <div class="pic"> <c:if test="${userId != null }"> <a ...