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

以下是例子的源码:

<!DOCTYPE html><!-- <html> -->
<!-- <body> -->
<!-- <div class="back-f5f5ff padding-top-20 padding-bottom-60"> -->
<!-- <div class="login-right login-style" id="login-container"> -->
<!-- <p class="font18">登录输入框</p> --> <!-- <form id="login-form-confirm" style="display:none;"> -->
<!-- <input type="hidden" name="lt" > -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
<!-- <input type="text" readonly="readonly" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="请输入您的账号"> -->
<!-- </div> -->
<!-- </div> -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
<!-- <input type="hidden" readonly="readonly" data-security="false" autocomplete="off" name="password" id="password" class="form-control input-lg required" value="" placeholder="请输入登录密码"> -->
<!-- <input type="password" readonly="readonly" data-security="false" autocomplete="off" name="passwordTemp" id="passwordTemp" class="form-control input-lg " value="********"> -->
<!-- </div> -->
<!-- </div> --> <!-- </form> --> <!-- <form id="login-form" > -->
<!-- <input type="hidden" name="lt" > -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-user font18 width-20"></i></div> -->
<!-- <input type="text" autocomplete="off" name="username" id="username" class="form-control input-lg required" value="" placeholder="请输入您的账号"> -->
<!-- </div> -->
<!-- </div> -->
<!-- <div class="form-group"> -->
<!-- <div class="input-group"> -->
<!-- <div class="input-group-addon"><i class="fa fa-lock font18 width-20"></i></div> -->
<!-- <input type="password" autocomplete="off" name="password" data-security="false" id="password" class="form-control input-lg required" value="" placeholder="请输入登录密码"> -->
<!-- </div> -->
<!-- </div> -->
<!-- </form> -->
<!-- </div> -->
<!-- </div> -->
<!-- </body> -->
<!-- </html> -->

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

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

from selenium import  webdriver

class demo:
def __init__(self):
import os
# 实现全局变量的引用
firefoxBin = os.path.abspath(r"E:\Program Files\Mozilla Firefox\firefox.exe")
os.environ["webdriver.firefox.bin"] = firefoxBin # 代码加载火狐驱动
firefoxgeckobdriver = os.path.abspath(r"E:\drivers\Drivers\geckodriver64.exe") self.browser = webdriver.Firefox(executable_path=firefoxgeckobdriver)
self.browser.maximize_window()
self.browser.implicitly_wait(10) self.browser.get("file:///C:/Users/70486/Desktop/demo.html") if __name__ == '__main__':
case = demo()
user = case.browser.find_element_by_css_selector('#username')
print(user)
user.send_keys('username')

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

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

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

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

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

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

但实际是存在页面的。

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

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

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

if __name__ == '__main__':
case = demo()
user = case.browser.find_elements_by_css_selector('#username')
print(len(user))
for size in user:
print(size)

打印的日志:

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

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

if __name__ == '__main__':
case = demo()
user = case.browser.find_elements_by_css_selector('#username')
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. mysql 获取所有的数据库名字

    mysql 获取所有的数据库名字 一.如果使用的是mysqli: $con = @mysqli_connect("localhost", "root", &qu ...

  2. poj3694+hdu2460 求桥+缩点+LCA/tarjan

    这个题使我更深理解了TARJAN算法,题意:无向图,每添加一条边后文桥的数量,三种解法:(按时间顺序),1,暴力,每每求桥,听说这样能过,我没过,用的hash判重,这次有俩个参数(n->10w, ...

  3. App竞品技术分析 (3)减小安装包的体积(转)

    http://blog.csdn.net/JspAndAsp/article/details/49339403 1 从几件小事说起 春节在家帮姐姐的iPhone手机安装市面上形形色色的App,忘记她是 ...

  4. Cooking Schedule Problem Code: SCHEDULE(优先队列)

    Cooking Schedule Problem Code: SCHEDULE Chef is a well-known chef, and everyone wishes to taste his ...

  5. Spring实战Day1

    为什么要学习使用Spring ------为了全方面简化Java开发 如何简化开发呢? 1.基于POJO[简单老式Java对象(Plain Old Java object)]的轻量级和最小侵入性编程, ...

  6. CentOS 5.11安装配置LAMP服务器(Apache+PHP5+MySQL)

    http://www.osyunwei.com/archives/8880.html 准备篇: CentOS 5.x系统安装配置图解教程 http://www.osyunwei.com/archive ...

  7. [Angular] Communicate Between Components Using Angular Dependency Injection

    Allow more than one child component of the same type. Allow child components to be placed within the ...

  8. Linux下获取线程TID的方法

    如何获取进程的PID(process ID)? 可以使用: #include <unistd.h> pid_t getpid(void); 通过查看头文件说明,可以得到更详细的信息: fi ...

  9. 怎样更好的设计你的REST API之基于REST架构的Web Service设计及REST框架实现

    一.REST 含状态传输(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格. 眼下在 ...

  10. 初识mina框架

    step1:创建java工程,导入jar包 step2:在src下配置log4j.properties文件 log4j.rootLogger=DEBUG,MINA,file log4j.appende ...