zoukankan      html  css  js  c++  java
  • python+selenium运行时,提示元素不可见

    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定位出两个相同元素,但是脚本中对元素的操作是单元素操作,所以程序无法识别出元素,就报上述错误。

    解决方法:

    方法一:

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

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

    
    
    
    
  • 相关阅读:
    style实例
    背景小实例
    html表单与输入实例
    列表小知识
    表格的使用
    框架的奥秘
    链接那档子事
    判断网络是否连通
    Python3编码规范
    CentOS 7 安装 Docker-Compose
  • 原文地址:https://www.cnblogs.com/pandaly/p/10486061.html
Copyright © 2011-2022 走看看