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

 
        
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM