在selenium中我有以下代码
elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Create new collab']")))
以便在以下构造中选择输入字段:
<div class="md-input-container md-theme-default md-input-placeholder">
<label>Collab Name</label>
<input placeholder="Create new collab" class="md-input" type="text">
<!---->
<!---->
<!---->
::after
</div>
但是等待10秒后我收到超时异常。手动我可以在加载后一秒钟点击并输入该输入字段中的内容。
以下ExpectedConditions
无法找到元素:
visibility_of_element_located
element_to_be_clickable
虽然这个methid能够找到元素:
presence_of_element_located
但我无法将send_keys
用于输入字段。我收到ElementNotInteractableException
错误。此外,在元素中“单击”不起作用 - 同样的错误。
那又该怎么办呢?
答案 0 :(得分:4)
class - 'md-tabs-wrapper'
的div有一个style attribute - 'transform: translate3d(-748px, 0px, 0px);'
。此div包含您尝试交互的输入框。 transform:translate3d
的作用是将div和内容移到左侧,将移到浏览器的视口外。您可以通过在浏览器中复制相关div然后关闭此样式或更改值来测试它。
这种关闭解释了为什么"presence" EC
有效,但可见性和点击EC却没有。显然,selenium无法确定该元素是否可见,从而抛出了ElementNotInteractableException
。
请改用ActionChains。使用存在EC中的元素。
actions = ActionChains(driver)
actions.move_to_element(element)
actions.send_keys("hello world")
actions.perform()
还需要清除现有的占位符文本,以便sendkeys正常工作。
答案 1 :(得分:0)
尝试以下方法:
elem = driver.find_elements_by_xpath("//input[@class='md-input' and @type='text']")
driver.execute_script("arguments[0].scrollIntoView();", elem)
wait = WebDriverWait(driver, 10)
my_element = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='md-input' and @type='text']")))
my_element.click()