刚接触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. webpack学习记录-初步体验(一)

    一.关于webpack 自从出现模块化以后,大家可以将原本一坨代码分离到个个模块中,但是由此引发了一个问题.每个 JS 文件都需要从服务器去拿,由此会导致加载速度变慢.Webpack 最主要的目的就是 ...

  2. 网页换肤,模块换肤,jQuery的Cookie插件使用(转)

    具体效果如下: 第一次加载如下图: 然后点击天蓝色按钮换成天蓝色皮肤如下图: 然后关闭网页重新打开或者在打开另一个网页如下图: 因为皮肤用Cookie保存了下来,所以不会重置 具体的实现代码如下: & ...

  3. Unity 动画系统

    Legacy动画系统:Animation组件(旧) Mecanim动画系统:Animator组件(新) 动画播放过程: //动画片段 [System.Serializable] public clas ...

  4. vmware(1):vmware中的bridge、nat、host-only的区别

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式) bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就 ...

  5. PowerShell Empire使用笔记

    ##安装过程 git clone https://github.com/EmpireProject/Empire.git cd Empire cd setup sudo ./install.sh ## ...

  6. 利用DOS命令窗口进行Mail通信(二)

    一:SMTP协议(对邮件进行发送) <SP>代表空格,<CRLF>代表回车和换行 SMTP命令格式 说明 ehlo<SP><domain><CRL ...

  7. 目前的.NET(C#)世界里,主流的ORM框架

    推荐一些常用的asp.net ORM框架 SqlSugar (国内) Dos.ORM (国内) Chloe (国内) StackExchange/Dapper (国外) Entity Framewor ...

  8. 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字

    一. 各类数据结构比较及其线程安全问题 1. Array(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的.数组的声明有两种形式:直接定义长度,然后赋值:直接赋值. 缺点:插入数据 ...

  9. 「CTSC2018」暴力写挂

    毫无$ Debug$能力 全世界就我会被卡空间.jpg LOJ #2553 UOJ #400 Luogu P4565 题意 给定两棵树$ T,T'$,求一组点对$ (x,y)$使得$deep(x)+d ...

  10. 原生js写轮播图效果

    <script> var picarr=[ "pic/lb1.jpg", "pic/lb2.jpg", "pic/lb3.jpg" ...