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

分析原因:前两次新增都是成功的,说明定位元素的代码没有问题; 加入等待时间还是报错,排除了页面没有加载完成的原因

打开开发者模式(F12),在控制台用id进行定位,发现出现了两个元素:

  1. 0:input#bankAccountType1.form-control
  2. 1:input#bankAccountType1

其中索引为1的元素是正常的,鼠标放到上面,浏览器也可识别出来,但索引为0的元素有后缀.form-control,鼠标放到上面浏览器也不能识别,具体怎么出来的这个元素,目前还不太清楚需要进一步探究。

进一步试验发现第二次新增时,通过id进行定位发现该元素就出现了两次。也就是说通过id定位出两个相同元素,但是脚本中对元素的操作是单元素操作,所以程序无法识别出元素,就报上述错误。

解决方法:

方法一:

先定位出元素列表,判断元素的大小,更改索引值

  1. 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])

  1.  

方法二:

在函数中增加一个参数,当n超过1时,先定位出一组元组,然后再对其中的元素进行操作。代码如下:

  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])

  1.  
  1.  

python+selenium运行时,提示元素不可见的更多相关文章

  1. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  2. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

  3. Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

         在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException ...

  4. Python+selenium(定位一组元素)

    我们熟知Webdriver有8种定位元素的方法,但是当需要定位一组元素的时候,可以使用Webdriver提供的与之对应的8种用于定位一组元素的方法,分别是: find_elements_by_id() ...

  5. 【python+selenium】截取某个元素

    一. selenium截图1.selenium提供了几个截取全屏的方法- get_screenshot_as_file(self, filename) --这个方法是获取当前window的截图,出现I ...

  6. python + selenium相关事件和元素定位

    女友由于工作上的失误,将公司RDM中的某一字段的2000条数据给删除了.....就算是重新添加字段,但是与其他数据的关联性已经不在了.由于每天的数据修改量大,有关部门不愿意恢复数据库,因此只能一条条的 ...

  7. python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8from selenium import webdriverdriver = webdriver.Chrome() ...

  8. python+selenium简单实现拖动元素实例

    from  selenium  import  webdriver#引入ActionChains类from  selenium.webdriver.common.action_chains  impo ...

  9. Python+selenium(操作隐藏元素)

    测试过程中,偶尔会碰到一些页面的隐藏元素,如下,是小编举的一个简单的例子: test.html <html> <head></head> <body> ...

随机推荐

  1. windows server 2012 r2打造工作站链接 和 RTSS画面防止撕裂方法(包括笔记本独显撕裂,视频撕裂等)

    听说 windows server 2008 基于windows vista ,windows server 2008 R2基于win7 , windows server 2012 基于windows ...

  2. gulp+ThinkPHP配置

    gulp+ThinkPHP配置 gulp+ThinkPHP配置 目录结构: html |-src 开发目录 |-Home 静态页面 |-Public 静态资源目录 |-dist 生产目录 |-Home ...

  3. 从 RegExp 构造器看 JS 字符串转义设计

    多年前我第一次入职腾讯的时候,DC 从杭州给我寄来了一本他刚翻译出炉的<高性能 JavaScript>.那段时间为了帮忙校对,我仔细阅读了书中的每一个段落,结果积累了不少 JavaScri ...

  4. Php如何返回json数据,前后端分离的基本解决方案

    php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...

  5. mysql 表结构转excel表格

    最近需要写文档,由于开发模式是先开发后写文档(不想吐槽...),数据库表结构什么的都搞好了,然后写文档的时候需要贴表结构,什么字段,类型,相关说明需要一一对应起来,数据库表10多张,字段又多,手动复制 ...

  6. C# 三种打印方式含代码

    一:C#代码直接打印pdf文件(打印质保书pdf文件) 引用: 代码注释很详细了. private void btn_pdf_Click(object sender, RoutedEventArgs ...

  7. Scrapy-redis<数据库篇>

    scrapy-redis爬虫数据库连接部分——windows准备做salve,Linux准备做master开展工作 首先处理简单的windows熟悉的环境——安装Redis服务和Redis可视化~可视 ...

  8. python将字符串类型list转换成list

    python读取了一个list是字符串形式的'[11.23,23.34]',想转换成list类型: 方式一: import ast str_list = "[11.23,23.34]&quo ...

  9. 【机器学习】--xgboost从初识到应用

    一.前述 在 Kaggle 的很多比赛中,我们可以看到很多 winner 喜欢用 xgboost,而且获得非常好的表现,今天就来看看 xgboost 到底是什么以及如何应用.Gradient boos ...

  10. was cached in the local repository, resolution will not be reattempted until the update interval of fintech has elapsed or updates are forced

    今天使用命令mvn compile编译maven项目时提示错误信息,错误信息如下: [ERROR] Failed to execute goal on project <project_name ...