例子是使用了selenium3.7.0 , python 3.6.2  , 火狐57版本

以下是例子的源码:

  1. <!DOCTYPE html><!-- <html> -->
  2. <!-- <body> -->
  3. <!-- <div class="back-f5f5ff padding-top-20 padding-bottom-60"> -->
  4. <!-- <div class="login-right login-style" id="login-container"> -->
  5. <!-- <p class="font18">登录输入框</p> -->
  6.  
  7. <!-- <form id="login-form-confirm" style="display:none;"> -->
  8. <!-- <input type="hidden" name="lt" > -->
  9. <!-- <div class="form-group"> -->
  10. <!-- <div class="input-group"> -->
  11. <!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
  12. <!-- <input type="text" readonly="readonly" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="请输入您的账号"> -->
  13. <!-- </div> -->
  14. <!-- </div> -->
  15. <!-- <div class="form-group"> -->
  16. <!-- <div class="input-group"> -->
  17. <!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
  18. <!-- <input type="hidden" readonly="readonly" data-security="false" autocomplete="off" name="password" id="password" class="form-control input-lg required" value="" placeholder="请输入登录密码"> -->
  19. <!-- <input type="password" readonly="readonly" data-security="false" autocomplete="off" name="passwordTemp" id="passwordTemp" class="form-control input-lg " value="********"> -->
  20. <!-- </div> -->
  21. <!-- </div> -->
  22.  
  23. <!-- </form> -->
  24.  
  25. <!-- <form id="login-form" > -->
  26. <!-- <input type="hidden" name="lt" > -->
  27. <!-- <div class="form-group"> -->
  28. <!-- <div class="input-group"> -->
  29. <!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
  30. <!-- <input type="text" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="请输入您的账号"> -->
  31. <!-- </div> -->
  32. <!-- </div> -->
  33. <!-- <div class="form-group"> -->
  34. <!-- <div class="input-group"> -->
  35. <!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
  36. <!-- <input type="password" autocomplete="off" name="password" data-security="false" id="password" class="form-control input-lg required" value="" placeholder="请输入登录密码"> -->
  37. <!-- </div> -->
  38. <!-- </div> -->
  39. <!-- </form> -->
  40. <!-- </div> -->
  41. <!-- </div> -->
  42. <!-- </body> -->
  43. <!-- </html> -->

当我们使用browser.find_element_by_css_selector()指令去找到元素体时,并进行输入操作时出现错误并提示说元素不可见

selenium.common.exceptions.ElementNotInteractableException: Message: Element is not visible

  1. from selenium import webdriver
  2.  
  3. class demo:
  4. def __init__(self):
  5. import os
  6. # 实现全局变量的引用
  7. firefoxBin = os.path.abspath(r"E:\Program Files\Mozilla Firefox\firefox.exe")
  8. os.environ["webdriver.firefox.bin"] = firefoxBin
  9.  
  10. # 代码加载火狐驱动
  11. firefoxgeckobdriver = os.path.abspath(r"E:\drivers\Drivers\geckodriver64.exe")
  12.  
  13. self.browser = webdriver.Firefox(executable_path=firefoxgeckobdriver)
  14. self.browser.maximize_window()
  15. self.browser.implicitly_wait(10)
  16.  
  17. self.browser.get("file:///C:/Users/70486/Desktop/demo.html")
  18.  
  19. if __name__ == '__main__':
  20. case = demo()
  21. user = case.browser.find_element_by_css_selector('#username')
  22. print(user)
  23. user.send_keys('username')

一般出现这类原因的情况有:(个人思路而已)

1.元素在from中。需要我们进入from之后在进行操作

2.元素还没有加载出来就进行操作了

3.元素不在当前页面需要上拉或者下拉才能出现

发现这次错误并不属于这三类情况。

后面发现该代码有2对账号密码的输入框,其中前面那对被隐藏了(style="display:none)。无法从界面上看到,

但实际是存在页面的。

遇到不可见的元素时我们可以通过JavaScript来改变style属性让其显示出来。

如果这么做了页面就出现了两对输入框了,不符合要求。

换了一种寻找的方式来找到下面那对显示的输入框,通过browser.find_elements_by_css_selector()

  1. if __name__ == '__main__':
  2. case = demo()
  3. user = case.browser.find_elements_by_css_selector('#username')
  4. print(len(user))
  5. for size in user:
  6. print(size)

打印的日志:

找到了那我们就通过user[1]来对齐输入。。

user[0]表示第一个,user[1]表示第二个。从0开始计算

  1. if __name__ == '__main__':
  2. case = demo()
  3. user = case.browser.find_elements_by_css_selector('#username')
  4. user[1].send_keys('username')

运行的效果

密码输入框也是通过这个思路进行输入的。

多实践多操作。

id和class重名的会很多。寻找方式也很多这里只是提供一个思路。

selenium中同名的class如何区分的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素

    目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...

  2. Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...

  3. selenium中处理不带ID的弹出窗口

    在selenium中虽然有selectWindow(String windowID) 方法,但是对于一些窗口很难取得其window ID的话,如果开发人员没有在html代码中提供ID ,或者getAl ...

  4. 转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. ...

  5. Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题

    在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...

  6. Python selenium中注入并执行Javascript语句

    众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...

  7. 【Selenium】selenium中隐藏元素如何定位?

    前言 面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚 ...

  8. 【基础】selenium中元素定位的常用方法(三)

    一.Selenium中元素定位共有八种 id name className tagName linkText partialLinkText xpath cssSelector 其中前六种都比较简单, ...

  9. 将DataRow赋值给model中同名属性

    /// <summary> /// 将DataRow赋值给model中同名属性 /// </summary> /// <typeparam name="T&qu ...

随机推荐

  1. BZOJ2097: [Usaco2010 Dec]Exercise 奶牛健美操

    n<=100000的树,砍S<n条边,求砍完后S+1棵树的最大直径的最小值. 树的直径要小小哒,那考虑一棵子树的情况吧!一棵子树的直径,就是子树根节点各儿子的最大深度+次大深度.就下面这样 ...

  2. BZOJ1775: [Usaco2009 Dec]Vidgame 电视游戏问题

    n<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益. 这就是一个背包!不过有依存关系,就不会了! 方法一:f[i][j]表 ...

  3. php 压缩数据存储

    php 压缩数据存储 当接收到大量的数据时,存储到数据库和从数据库读取时,时间都比较慢,所以压缩一下入库可能会好一点. 仅供参考!!! 封装的压缩数据函数: /** * 压缩数据 * @param s ...

  4. 一个APP的由来

    之前在站酷.UI中国.优设等网站看过不少的APP教程.规范等一些东西.自认为有些规范讲的内容过于繁琐,对于像我这样的大多数设计师来说看着看着就懵逼了....          

  5. 牛客网暑期ACM多校训练营(第六场)G

    https://www.nowcoder.com/acm/contest/144/G 链接:https://www.nowcoder.com/acm/contest/144/G来源:牛客网 In Vi ...

  6. 转: ORACLE存储过程笔记3----流程控制

    流程控制 1.条件   if expression thenpl/sql or sqlend if;   if expression thenpl/sql or sqlelsif expression ...

  7. 【c++】c++一些基础面试题

    http://www.mianwww.com/html/2013/10/19128.html http://blog.csdn.net/wdzxl198/article/details/9050751 ...

  8. [转]linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结

    原文:http://www.jb51.net/LINUXjishu/43356.html ------------------------------------------------------- ...

  9. UML视频总结

    "RUP 4+1"视图 学习UML我们就必须先了解这"RUP 4+1"视图,它是架构设计的结构标准,例如以下图所看到的. watermark/2/text/aH ...

  10. iOS xmpp的使用

    #import "AppDelegate.h" //#import "DBAreaItem.h" #pragma mark - #pragma mark Pri ...