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 ...
随机推荐
- BZOJ2097: [Usaco2010 Dec]Exercise 奶牛健美操
n<=100000的树,砍S<n条边,求砍完后S+1棵树的最大直径的最小值. 树的直径要小小哒,那考虑一棵子树的情况吧!一棵子树的直径,就是子树根节点各儿子的最大深度+次大深度.就下面这样 ...
- BZOJ1775: [Usaco2009 Dec]Vidgame 电视游戏问题
n<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益. 这就是一个背包!不过有依存关系,就不会了! 方法一:f[i][j]表 ...
- php 压缩数据存储
php 压缩数据存储 当接收到大量的数据时,存储到数据库和从数据库读取时,时间都比较慢,所以压缩一下入库可能会好一点. 仅供参考!!! 封装的压缩数据函数: /** * 压缩数据 * @param s ...
- 一个APP的由来
之前在站酷.UI中国.优设等网站看过不少的APP教程.规范等一些东西.自认为有些规范讲的内容过于繁琐,对于像我这样的大多数设计师来说看着看着就懵逼了....
- 牛客网暑期ACM多校训练营(第六场)G
https://www.nowcoder.com/acm/contest/144/G 链接:https://www.nowcoder.com/acm/contest/144/G来源:牛客网 In Vi ...
- 转: ORACLE存储过程笔记3----流程控制
流程控制 1.条件 if expression thenpl/sql or sqlend if; if expression thenpl/sql or sqlelsif expression ...
- 【c++】c++一些基础面试题
http://www.mianwww.com/html/2013/10/19128.html http://blog.csdn.net/wdzxl198/article/details/9050751 ...
- [转]linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
原文:http://www.jb51.net/LINUXjishu/43356.html ------------------------------------------------------- ...
- UML视频总结
"RUP 4+1"视图 学习UML我们就必须先了解这"RUP 4+1"视图,它是架构设计的结构标准,例如以下图所看到的. watermark/2/text/aH ...
- iOS xmpp的使用
#import "AppDelegate.h" //#import "DBAreaItem.h" #pragma mark - #pragma mark Pri ...