虽然webelement是可见的硒,但为什么我会超时?

时间:2017-10-16 14:56:39

标签: selenium

在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错误。此外,在元素中“单击”不起作用 - 同样的错误。

那又该怎么办呢?

2 个答案:

答案 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()
相关问题