メールの受信を送信/確認するために、Selenium WebDriver と Python を使用して簡単なテストを実行しています。
メッセージ本文を含む iframe に切り替えて、編集可能な body 要素を見つけて消去しようとすると、次の例外がスローされます。
Traceback (most recent call last):
driver.find_element_by_xpath("//body[@role='textbox']").clear()
selenium.common.exceptions.WebDriverException: Message: 'Element must be user-editable in order to clear it.'
メールの作成に使用するスクリプトは次のとおりです。
driver.find_element_by_name("to").clear()
driver.find_element_by_name("to").send_keys("toemailaddy@gmail.com")
localtime = time.asctime( time.localtime(time.time()) )
subj = ("TEST - " + localtime)
print(subj)
driver.find_element_by_name("subjectbox").clear()
driver.find_element_by_name("subjectbox").send_keys(subj)
body = ("TEST")
bodyFrame = driver.find_element_by_xpath("//td[@class='Ap']//iframe")
driver.switch_to_frame(bodyFrame)
driver.find_element_by_xpath("//body[@role='textbox']").clear()
driver.find_element_by_xpath("//body[@role='textbox']").send_keys(body)
driver.find_element_by_xpath("/div[@role='button' and contains(text(), 'Send')]").click()
driver.find_element_by_link_text("Inbox (1)").click()
ただし、メッセージ本文はユーザーが明示的に編集できます。以下に、編集可能であることを明示的に示す td クラス「Ap」にネストされた iframe 内に WebDriver を送信したメッセージ本文 HTML のスニペットを含めました。
<body id=":3" class="editable LW-avf" style="min-width: 0px; width: 437px;
border: 0px none; margin: 0px; background: none repeat scroll 0% 0% transparent;
height: 100%; overflow: hidden; direction: ltr; min-height: 121px;" hidefocus="true"
g_editable="true" role="textbox">
IDE はすべての要素にアクセスできますが、WebDriver がそれらにアクセスできない原因は何でしょうか?
編集
さて、私は何が例外を引き起こしているのかを見つけました:
スクリプトから次の行を削除すると、WebDriver がテキスト ボックスに書き込むことができることがわかりました。
driver.find_element_by_xpath("//body[@role='textbox']").clear()
要素が編集可能でなければならないという例外をスローするのに、問題なく要素に send_keys を許可するのはなぜだろうか?