python+selenium运行时,提示元素不可见
python+selenium运行多次新增项目脚本(出错的元素通过by_id的方式定位),当第三次新增时报Message: element not visible的错误,加入等待时间,等页面加载完成,仍旧报相同的错误,错误如下图:

分析原因:前两次新增都是成功的,说明定位元素的代码没有问题; 加入等待时间还是报错,排除了页面没有加载完成的原因
打开开发者模式(F12),在控制台用id进行定位,发现出现了两个元素:
- 0:input#bankAccountType1.form-control
- 1:input#bankAccountType1
其中索引为1的元素是正常的,鼠标放到上面,浏览器也可识别出来,但索引为0的元素有后缀.form-control,鼠标放到上面浏览器也不能识别,具体怎么出来的这个元素,目前还不太清楚需要进一步探究。
进一步试验发现第二次新增时,通过id进行定位发现该元素就出现了两次。也就是说通过id定位出两个相同元素,但是脚本中对元素的操作是单元素操作,所以程序无法识别出元素,就报上述错误。

解决方法:
方法一:
先定位出元素列表,判断元素的大小,更改索引值
def choose_account_type(self):
choice_account_type = random.randint(1, 2)
if choice_account_type == 1:
css_account_type_current_account = self.add_merchant_v2_config_ini.get_ini_value \
("add_merchant_v2.ini", "bank_accounts", "current_account")
el_account_type_current_account_list = self.driver.getElenments(css_account_type_current_account)
if len(el_account_type_current_account_list) > 1:
n = 1
else:
n = 0
self.driver.click1(el_account_type_current_account_list[n])
else:
css_account_type_current_account = self.add_merchant_v2_config_ini.get_ini_value \
("add_merchant_v2.ini", "bank_accounts", "saving_account")
el_account_type_current_account_list = self.driver.getElenments(css_account_type_current_account)
if len(el_account_type_current_account_list) > 1:
n = 1
else:
n = 0
self.driver.click1(el_account_type_current_account_list[n])

方法二:
在函数中增加一个参数,当n超过1时,先定位出一组元组,然后再对其中的元素进行操作。代码如下:
def choose_account_type(self, n=0):
if n < 1:
choice_account_type = random.randint(1, 2)
if choice_account_type == 1:
css_account_type_current_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"current_account")
self.driver.click(css_account_type_current_account)
else:
css_account_type_saving_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"saving_account")
self.driver.click(css_account_type_saving_account)
else:
time.sleep(0.5)
choice_account_type = random.randint(1, 2)
if choice_account_type == 1:
css_account_type_current_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"current_account")
el_account_type_current_account_list = self.driver.getElenments(css_account_type_current_account)
self.driver.click1(el_account_type_current_account_list[1])
else:
css_account_type_saving_account = self.add_merchantR2_config_ini.get_ini_value("add_merchantR2.ini",
"bankaccounts",
"saving_account")
el_account_type_saving_account_list = self.driver.getElenments(css_account_type_saving_account)
self.driver.click1(el_account_type_saving_account_list[1])

python+selenium运行时,提示元素不可见的更多相关文章
- Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法
Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法 之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...
- Python+Selenium自动化-定位页面元素的八种方法
Python+Selenium自动化-定位页面元素的八种方法 本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...
- Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)
在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException ...
- Python+selenium(定位一组元素)
我们熟知Webdriver有8种定位元素的方法,但是当需要定位一组元素的时候,可以使用Webdriver提供的与之对应的8种用于定位一组元素的方法,分别是: find_elements_by_id() ...
- 【python+selenium】截取某个元素
一. selenium截图1.selenium提供了几个截取全屏的方法- get_screenshot_as_file(self, filename) --这个方法是获取当前window的截图,出现I ...
- python + selenium相关事件和元素定位
女友由于工作上的失误,将公司RDM中的某一字段的2000条数据给删除了.....就算是重新添加字段,但是与其他数据的关联性已经不在了.由于每天的数据修改量大,有关部门不愿意恢复数据库,因此只能一条条的 ...
- python + selenium 练习篇 - 定位元素的方法
1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8from selenium import webdriverdriver = webdriver.Chrome() ...
- python+selenium简单实现拖动元素实例
from selenium import webdriver#引入ActionChains类from selenium.webdriver.common.action_chains impo ...
- Python+selenium(操作隐藏元素)
测试过程中,偶尔会碰到一些页面的隐藏元素,如下,是小编举的一个简单的例子: test.html <html> <head></head> <body> ...
随机推荐
- 如何设置织梦cms自定义表单字段为必填项
1.编辑器打开\plus\diy.php2.在40行左右找到此行代码:$dede_fields = empty($dede_fields) ? '' : trim($dede_fields);3.在这 ...
- 如何让 Editplus 支持 SQL 语法高亮
editplus 用来编辑或查看一些常用程序源码都很方便,而且软件小巧,但是他原生不能支持对 SQL 文件的高亮显示,有点遗憾,但好在我们可以自定义这种高亮显示,那么要如何设置呢 1. 首先点击下载文 ...
- Java线程组(ThreadGroup)使用
JDK 对线程组类注释: A thread group represents a set of threads. In addition, a thread group can also includ ...
- ==运算符和equals()方法的区别
Java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用equals方法. 1. ==运算符 对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就 ...
- 10分钟详解Spring全家桶7大知识点
Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...
- java常用API的总结(1)
本篇是对于这一段时间以来接触到的常用api的一些总结,便于以后的查阅.... 一.正则表达式 对于正则表达式,我的感觉就是当我们在做某些题的时候正则表达式会省去我们很多的时间,并且正则表达式的使用格式 ...
- 关于 Docker 镜像的操作,看完这篇就够啦 !(上)
文章首发于微信公众号: 小哈学Java 镜像作为 Docker 三大核心概念中,最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的.本文将带您一步一步,图文并重,上手操作来学习它. 目录 ...
- python接口自动化(六)--发送get请求接口(详解)
简介 如果想用python做接口测试,我们首先有不得不了解和学习的模块.它就是第三方模块:Requests. 虽然Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺 ...
- TabLayoutBottomDemo【TabLayout实现底部选项卡】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用TabLayout实现底部选项卡切换功能. 效果图 代码分析 1.演示固定模式的展现 2.演示自定义布局的实现 使用步骤 一.项 ...
- 【hashMap】详谈
官方文档地说明 几个关键的信息:基于Map接口实现.允许null键/值.非同步.不保证有序(比如插入的顺序).也不保证序不随时间变化. 一.概述 HashMap 是一个散列表,它存储的内容是键值对(k ...