Python Selenium ElementNotInteractableException消息:键盘无法到达元素

时间:2019-01-16 22:48:49

标签: python selenium

我是Python和Selenium的新手,正在努力为公司网站测试表单。

我正在尝试在字段中输入文本。这是html:

<input class="form-control" data-val="true" data-val-length="Must be between 2 and 35 characters" data-val-length-max="35" data-val-length-min="2" data-val-requiredif="*First Name is required" data-val-requiredif-dependentproperty="IsMobile" data-val-requiredif-desiredvalue="False" id="FirstName-guide-request-ed9e64ebe3b245a28c9caaabbcd47b95" maxlength="35" name="FirstName" type="text" value="">

这是我尝试输入文本的代码:

driver = webdriver.Firefox(executable_path = r'C:\Users\jajacobs\Downloads\geckodriver.exe')

driver.get("https://www.graphicproducts.com/guides/5s-system/")
driver.execute_script("window.scrollTo(0, 1000);")

driver.find_element_by_name('FirstName').send_keys('test', Keys.ENTER)

driver.close()

我收到以下错误:

---------------------------------------------------------------------------
ElementNotInteractableException           Traceback (most recent call last)
<ipython-input-58-6b71ac82d9ce> in <module>
     10 
     11 timeout = 20
---> 12 driver.find_element_by_name('FirstName').send_keys('test', Keys.ENTER)
     13 
     14 driver.close()

~\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in send_keys(self, *value)
    477         self._execute(Command.SEND_KEYS_TO_ELEMENT,
    478                       {'text': "".join(keys_to_typing(value)),
--> 479                        'value': keys_to_typing(value)})
    480 
    481     # RenderedWebElement Items

~\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
    631             params = {}
    632         params['id'] = self._id
--> 633         return self._parent.execute(command, params)
    634 
    635     def find_element(self, by=By.ID, value=None):

~\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

~\AppData\Local\Continuum\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

ElementNotInteractableException: Message: Element <input id="FirstName-guide-request-d277b94a662f45e686bf443012505716" class="form-control" name="FirstName" type="text"> is not reachable by keyboard

页面顶部有一个搜索框,我可以用相同的代码输入文本,但是用不同的名称进行修改。这是html:

<input id="GlobalSearchMobile" name="q" class="srch-term form-control" type="text" autocomplete="off" placeholder="Search by Keyword or SKU">

这是我用来在搜索框中输入文本的代码:

driver = webdriver.Firefox(executable_path = r'C:\Users\jajacobs\Downloads\geckodriver.exe')

driver.get("https://www.graphicproducts.com/guides/5s-system/")
driver.execute_script("window.scrollTo(0, 1000);")

driver.find_element_by_name('q').send_keys('test', Keys.ENTER)

driver.close()

因此,基本上我无法弄清楚为什么第二组代码适用于页面顶部的搜索框,而第一组代码不适用于页面中间的表单。

如果有帮助,我很乐意提供更多的html。

我正在Windows 10计算机上通过Anaconda在Jupyter Notebook启动中使用Python 3.7。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果您查看网页的html,则有两个元素的名称字段值为“ FirstName”。 (您可以在开发人员选项中搜索字符串'// * [@ name =“ FirstName”]'进行检查。)

因此,您可以使用类似的方法来获取所需的元素:

driver.find_elements_by_name('FirstName')[1].send_keys('test', Keys.ENTER)

在这里,find_elements..方法将返回所有具有相同定位符的元素的列表,而不是像find_element..方法那样从顶部开始的第一个元素,并且您要搜索的元素从顶部开始是第二个元素,因此我们用索引“ 1”索引find_elements..的结果。

顺便说一句,我在Chrome中尝试过此操作,但它也应在Firefox上也可以使用。