selenium中同名的class如何区分
例子是使用了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如何区分的更多相关文章
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...
- selenium中处理不带ID的弹出窗口
在selenium中虽然有selectWindow(String windowID) 方法,但是对于一些窗口很难取得其window ID的话,如果开发人员没有在html代码中提供ID ,或者getAl ...
- 转:Selenium中的几种等待方式,需特别注意implicitlyWait的用法
最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法. ...
- Selenium中三种等待的使用方式---规避网络延迟、代码不稳定问题
在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...
- Python selenium中注入并执行Javascript语句
众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...
- 【Selenium】selenium中隐藏元素如何定位?
前言 面试题:selenium 中隐藏元素如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了 但是吧~~~很多面试官自己都搞不清楚 ...
- 【基础】selenium中元素定位的常用方法(三)
一.Selenium中元素定位共有八种 id name className tagName linkText partialLinkText xpath cssSelector 其中前六种都比较简单, ...
- 将DataRow赋值给model中同名属性
/// <summary> /// 将DataRow赋值给model中同名属性 /// </summary> /// <typeparam name="T&qu ...
随机推荐
- Flume+kakfa+sparkStream实时处理数据测试
flume:从数据源拉取数据 kafka:主要起到缓冲从flume拉取多了的数据 sparkStream:对数据进行处理 一.flume拉取数据 1.源数据文件读取配置 在flume目录的 ...
- Python基础之 一 字符编码及转换
python2 / python3编码转换 先上图一张: 说明:python编码转换的流程是 先进行decode解码,然后进行encode编码 解释: u'你好' -->带u表示为unicod ...
- try catch finally执行顺序 (return / 变量覆盖)
finally有return 始终返回finally中的return 抛弃 try 与catch中的return 情况1:try{} catch(){}finally{} return x; try{ ...
- Ubuntu 16.04关闭Alt+鼠标左键移动窗口(转)
1.打开终端,菜单-编辑-配置文件首选项-命令,勾上“以登录Shell方式运行命令”,重启终端. 2.在终端输入 gsettings get org.gnome.desktop.wm.preferen ...
- IOCP数据中间件
IOCP数据中间件 每包最大8K(8192字节),超过8187字节的数据要分包传输 首包有5个字节的包头:4字节数据长度(告诉对方,此次总共将传输几字节数据) + 1字节命令字(告诉对方,此次请求的何 ...
- JIRA运行太慢,修改JVM
JIRA运行太慢,根据实际实况,修改JVM内存大小 2. 非NT服务修改JVM内存大小 修改%JIRA_HOME%/bin下面的setenv.bat文件,修改JAVA_OPTS这个环境变量 set J ...
- leetcode:238. Product of Array Except Self(Java)解答
转载请注明出处:z_zhaojun的博客 原文地址 题目地址 Product of Array Except Self Given an array of n integers where n > ...
- oracle技术总结
http://www.cnblogs.com/jimeper/ http://blog.csdn.net/dragonxiangfu http://www.boobooke.com/bbs/threa ...
- Git撤销&回滚操作
开发过程中.你肯定会遇到这种场景: 场景一: 糟了.我刚把不想要的代码.commit到本地仓库中了.可是还没有做push操作! 场景二: 彻底完了.刚线上更新的代码出现故障了.须要还原这次提交的代码! ...
- LINQ体验(1)——Visual Studio 2008新特性
一.写本系列的目的 我平时利用课余零碎时间来学习ASP.NET3.5.LINQ.Silverlight.ASP.NET 3.5 Extensions等新东西,通过笔记形式来记录自己所学的历 程.也给大 ...