我正在使用 Selenium WebDriver 和 Python 运行一个简单的测试来发送/验证电子邮件的接收。
一旦我切换到包含消息正文的 iframe 并找到可编辑的正文元素并尝试将其清除,就会引发以下异常:
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()
但是,消息正文是明确的用户可编辑的。下面我包含了消息正文 HTML 的片段,我将 WebDriver 定向到嵌套在 td 类“Ap”中的 iframe 中,明确表明它是可编辑的。
<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()
虽然我想知道为什么它会抛出元素必须是可编辑的异常,但允许它毫无问题地将_keys发送到元素?