26

Pythonを使用して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'

これが私のプログラムです

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

私は何かが欠けていると思います。私に提案してください

4

8 に答える 8

74

助けてくれてありがとう。私は自分で答えを見つけました。「ダン・ニーロ」からのアイデア

問題は、driver.find_element[s]代わりに使用していることですdriver.find_element。したがって、違いが生じ、間違ったメソッドを呼び出すことになります。実際、私はEclipseのオートコンプリートに従っています:(。明らかdriver.find_elements_by_link_textにリストを返すので、クリックイベントを送信しても理解できません。

助けてくれてありがとう、私の悪い質問でごめんなさい

-ヴィクラム

于 2012-06-27T09:42:24.067 に答える
16

たぶんdriver.find_elements_by_link_text("MISCQA Misc Tests")[0].click()、または別のインデックス...

Selenium はわかりませんが、find_elements_by_link_text が複数のものを見つけているか、メソッドが常に単一のオブジェクトではなくリストを返していると思います。1 つのオブジェクトのみが検索の結果であることが絶対に確実な場合は、先ほど述べたように [0] を使用するよりも、オブジェクトが 1 つだけであると想定できない場合は、より強力なオブジェクトを考え出す必要があります。ストラテジー

于 2012-06-27T09:27:30.100 に答える
2

コードの一部、

driver.find_elements_by_link_text("MISCQA Misc Tests")

は、セレンWebドライバーのオブジェクトではなくリストを返します(必要なもの、関数 "click()"を持つクラスのオブジェクト)。

ほとんどの場合、リストの要素はオブジェクトになります。

コードのその部分の後にリストを印刷し、リストの要素が必要なものであるかどうかを確認します。

于 2012-06-27T09:25:34.990 に答える
2

単一の要素が必要な場合は、次を使用できます。

driver.find_element_by_link_text("MISCQA Misc Tests")

または、リスト全体が必要な場合は、次のようにします。

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()
于 2016-07-27T12:21:43.953 に答える
0

このステートメントは、 クリックできない可能性のあるWebElementdriver.find_elements_by_link_text("MISCQA Misc Tests") のリストを返します。

したがって、返されたWebElementのリストをループして、クリック可能な要素をクリックする必要があります。

この関数を使用して、WebElementがクリック可能かどうかを確認できisClickable()ます。

Pythonを知らないので、コードを投稿していません。これがお役に立てば幸いです。

于 2012-06-27T09:43:39.503 に答える