例子是使用了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. Python基础教程笔记——第1章

    1.8 函数 pow(x,y) x^y abs(x)          取数的绝对值 round(x)   会把浮点数四舍五入为最接近的整数 floor(x)     向下取整的函数,但是需要先imp ...

  2. 洛谷——P1265 公路修建

    P1265 公路修建 题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一 ...

  3. AE的Annotation学习摘记

    http://xg-357.blog.163.com/blog/static/36263124201151763512894/ IFeatureWorkspaceAnno pFWSAnno = (IF ...

  4. FM算法及FFM算法

    转自:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html http://blog.csdn. ...

  5. 【APUE】孤儿进程与僵死进程

    基本概念: 在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程 ...

  6. Redis Server分布式缓存编程

    这篇文章我将介绍如果用最简洁的方式配置Redis Server, 以及如何使用C#和它交互编程 一. 背景介绍 Redis是最快的key-value分布式缓存之一 缺点: 没有本地数据缓冲, 目前还没 ...

  7. EA生成实体类代码

    引言 在做机房个人版重构的时候,就听说了EA是一个强大的软件.仅仅只是知道的时候,已经画完了图,没有怎么用EA其它的功能,所以一直没有见识过罢了.如今到了机房合作了,想到EA一定要好好用,这样能省不少 ...

  8. mysql最新版中文参考手册在线浏览

    MySQL是最流行的开放源码SQL数据库管理系统,具有快速.可靠和易于使用的特点.同时MySQL也是一种关联数据库管理系统,具有很高的响应速度和灵活性.又因为mysql拥有良好的连通性.速度和安全性, ...

  9. struts2 Action获取表单数据

    1.通过属性驱动式 1.首先设置 表单中的数据的name值 如:<input type="text" name="username" value=&quo ...

  10. 总结文件操作函数(二)-C语言

    格式化读写: #include <stdio.h> int printf(const char *format, ...);                   //相当于fprintf( ...