• Selenium定位不到元素的解决方法—iframe挡住了去路


    刚接触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
    原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。
  • 相关阅读:
    SharePoint 创建 Lookup 类型的Site Column解决跨站问题
    Thinking In Design Pattern——MVP模式演绎
    SharePoint自动化部署,利用SPSD工具包
    SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户
    64位内核第十四讲,获取系统滴答数与日期时间
    内核中通过进程PID获取进程的全部路径
    内核中根据进程Pid获取卷的全目录
    内核中PID_HANDLE_OBJECT等互相转换
    获取指定句柄的类型号.
    获取句柄的类型以及对应的ID序号
  • 原文地址:https://www.cnblogs.com/fengshuihuan/p/7805013.html
Copyright © 2020-2023  润新知