在当前文本框上写入值 - Selenium

时间:2014-05-21 19:32:56

标签: python-2.7 selenium-webdriver

我在这里面临一个问题:
我使用Selenium自动化我的应用程序测试,并使用以下代码填充文本框:

driver.find_element_by_id("form_widget_serial_number").send_keys("example", u'\u0009')

所有文本框都具有相同的ID(form_widget_serial_number),因此无法通过使用id选择来选择特定的文本框(上面的代码选择第一个文本框, u'\ u0009'更改光标位置到下一个文本框)。

enter image description here

无论如何,如果光标位于当前文本框中,如何在不使用 find_element_by_id 或其他选择器的情况下将值发送到“当前”文本框?

3 个答案:

答案 0 :(得分:3)

有几种选择器可用 - 特别是Xpath和css非常强大。

Xpath甚至可以通过元素的文本进行选择,然后访问其第二个兄弟 1

elem = driver.find_element(:xpath, "//div[contains(text(), 'match this text')]/following-sibling::*[2]")

如果您需要找到具有焦点的当前元素:

focused_elem = driver.switch_to.active_element

然后找到下一个:

elem_sibling = focused_elem.find_element(:xpath, "following-sibling::*")

使用此示例,您可以轻松遍历任何顺序元素序列,这似乎可以解决您的问题。

仔细查看页面的结构,然后看看如何从可以获取的引用导航到您需要的元素。可能有一个Xpath或css选择器可以在文档中进行遍历。

1 仅供参考,我在Ruby中使用旧版本的Selenium,以防你的版本语法不同

答案 1 :(得分:1)

我的方法是:

  1. 按已知ID
  2. 获取所有可投影元素的列表
  3. 循环遍历它们,直到找到焦点元素
  4. 使用send_keys写入该元素
  5. 使焦点元素像

    get_element_index('dom=document.activeElement')
    

    可能会奏效。有关详细信息,请参阅this question

    编辑:如果您从1.获得的列表意外地被正确排序,则此列表中元素的索引甚至可能代表您必须的 u' \ u0009' 的数量发送以达到该特定元素。

答案 2 :(得分:0)

使用 ActionChains 实用程序来执行此操作。使用以下代码:

from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).send_keys("Hello").perform()