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 ...
随机推荐
- PHP 基础复习 2018-06-17
(1)AJAX Asynchronous JavaScript And XML(异步 JavaScript 及 XML) (2)创建 XMLHttpRequest 对象 不同的浏览器使用不同的方法来创 ...
- hdu6110(线段树+lca)
题目 http://acm.hdu.edu.cn/showproblem.php?pid=6110 分析 注意到,若干条路径的交一定也是条路径 我们可以维护一个线段树,seg[l..r]存着第l条~第 ...
- CORS:Source.priciple implimentation in Spring
Cors(Cross-origin Resource Sharing)一种跨域访问技术,基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定响应成功与否. CORS与JSONP对 ...
- Java实验--关于简单字符串回文的递归判断实验
首先题目要求写的是递归的实验,一开始没注意要求,写了非递归的方法.浪费了一些时间,所谓吃一堑长一智.我学习到了以后看实验的时候要认真看实验中的要求,防止再看错. 以下是对此次的实验进行的分析: 1)递 ...
- python字符串连接方法效率比较
方法1:直接通过加号(+)操作符连接 1 website = 'python' + 'tab' + '.com' 方法2:join方法 1 2 listStr = ['python', 'tab', ...
- Word 2013安裝字典
不必從內建的字典中開始,Word 2013 可將您連結到 Office 市集,方便您挑選免費的字典,或從包括多語字典的字典集合中購買. 若要選擇並安裝您想要的字典,請以滑鼠右鍵按一下任何單字,並按一下 ...
- 最新---java多线程下载文件
import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; impo ...
- 系统重装 Ghost系统的disk to image等等是什么意思
localdiskto disk to imade from imagepartitionto partition to image from imagecheckimage file disk这些是 ...
- 怎样使用SSH连接OpenStack上的云主机
转载请注明出处.否则将追究法律责任http://blog.csdn.net/xingjiarong/article/details/47021815 在上一篇博客中我介绍了怎样在OpenStack中创 ...
- Structual设计--Bridge模式
1.意图 将抽象部分与它的实现部分分离.使他们都能够独立地变化. 2.别名 Handle/Body 3.动机 当一个抽象对象可能有多个实现时,通经常使用继承来协调它们.抽象类定义对该抽象的接口.而详细 ...