2012-06-27 37 views
5

Tôi đang cố gắng sử dụng lệnh bấm trong trình duyệt web Selenium bằng cách sử dụng python. Nhưng tôi nhận được lỗi dưới đây. Ai đó có thể giúp tôi?AttributeError: đối tượng 'list' không có thuộc tính 'click' - Selenium Webdriver

Traceback (most recent call last): 
File "C:\Users\vikram\workspace\LDC\test.py", line 13, in <module> 
driver.find_elements_by_link_text("MISCQA Misc Tests").click() 
AttributeError: 'list' object has no attribute 'click' 

Đây là chương trình của tôi

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.support.ui import WebDriverWait 
import config 

url = config.config.get('url') 

driver = webdriver.Ie() 
driver.get(url) 

driver.find_elements_by_link_text("MISCQA Misc Tests").click() 

driver.close() 

Tôi nghĩ rằng tôi đang thiếu một số điều. Xin gợi ý cho tôi

+0

driver.find_elements_by_link_text ("MISCQA Misc Tests") danh sách trả về, không phải đối tượng có thể gọi – cval

Trả lời

17

Cảm ơn bạn đã trợ giúp. Tôi tìm thấy câu trả lời cho bản thân mình. Ý tưởng được đưa ra bởi "Dan Niero"

Vấn đề là, tôi đang sử dụng driver.find_element[s] thay vì driver.find_element. Vì vậy, một s làm cho sự khác biệt. Trong thực tế, tôi đang theo nhật thực :(. Rõ ràng danh sách driver.find_elements_by_link_text lợi nhuận nên nếu tôi gửi bấm kiện nó wont hiểu.

Cảm ơn vì đã giúp và xin lỗi vì câu hỏi của tôi xấu

-Vikram

1

Phần mã của bạn,

driver.find_elements_by_link_text("MISCQA Misc Tests") 

đang trở lại một danh sách và không phải là một đối tượng của webdriver selen (những gì bạn muốn, đối tượng của lớp có chức năng "nhấp chuột()").

Rất có thể là, các yếu tố trong danh sách sẽ là đối tượng.

In danh sách sau phần đó của mã và kiểm tra xem các yếu tố trong danh sách có phải là những yếu tố bạn cần hay không.

+0

Đây là kết quả đầu ra mà tôi nhận được [đối tượng ] – vkrams

+0

Trình điều khiển WebDriver = new InternetExplorerDriver(); driver.get (url); \t Phần tử WebElement = driver.findElement (By.linkText ("Kiểm tra khác")); element.click(); - Đây là mã trong Java. Tôi muốn mô phỏng giống nhau trong Selenium Python – vkrams

+1

Có. đây là những vật thể. Vì vậy, chỉ cần lặp qua danh sách và gọi phương thức click() trên chúng. Ví dụ: driver.find_elements_by_link_text ("MISCQA Misc Tests") [0] .click() –

8

lẽ driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click() hoặc chỉ số khác ...

Tôi không biết Selenium, nhưng tôi đoán find_elements_by_link_text được tìm nhiều hơn một điều, hoặc có lẽ phương pháp này luôn trả về một danh sách chứ không phải là một đối tượng duy nhất. Nếu bạn hoàn toàn chắc chắn rằng chỉ một đối tượng nên là kết quả tìm kiếm của bạn, hơn là chỉ sử dụng [0] như tôi đã đề cập, nếu bạn không thể giả định rằng sẽ chỉ có một đối tượng, bạn cần phải tìm ra một chiến lược

+0

Tôi đã sử dụng câu lệnh trên nhưng không may mắn. bạn có nghĩ rằng tôi đã không nhập một lớp chính xác cho nó. – vkrams

+1

Vikram, tôi không biết Selenium này, nhưng thông báo lỗi bạn đã nói rõ ràng rằng bạn có LIST trở lại, vì vậy bạn cần truy cập các phần tử bên trong danh sách đó ... Lỗi nào khác bạn nhận được khi bạn cố gắng làm như vậy? –

0

Tuyên bố driver.find_elements_by_link_text("MISCQA Misc Tests") trả về danh sách WebElement một số trong số đó có thể không nhấp được.

Vì vậy, bạn sẽ phải lặp qua danh sách WebElement được trả về và sau đó nhấp vào các thành phần có thể nhấp.

Bạn có thể kiểm tra xem WebElement có thể nhấp được hay không bằng cách sử dụng chức năng isClickable().

Tôi chưa đăng mã vì tôi không biết Python. Hy vọng điều này sẽ giúp bạn.

+0

isClickable() trả về boolean để nó không yêu cầu. Dù sao tôi tìm thấy câu trả lời – vkrams

0

nếu bạn muốn yếu tố duy nhất để u có thể sử dụng:

driver.find_element_by_link_text("MISCQA Misc Tests") 

hoặc nếu bạn muốn toàn bộ danh sách, sau đó:

for x in self.driver.find_elements_by_link_text("MISCQA Misc Tests"): 
    link = webdriver.ActionChains(self.driver).move_to_element(x).click(x).perform() 
0

nếu thuộc tính của "MISCQA Misc thử nghiệm" chỉ có một, Bạn có thể thử thay đổi các phần tử thành phần tử trong mã 'driver.find_elements_by_link_text ("MISCQA Misc Tests")' Hy vọng vấn đề sẽ được sửa chữa

Các vấn đề liên quan