我在这里面临一个问题:
我使用Selenium自动化我的应用程序测试,并使用以下代码填充文本框:
driver.find_element_by_id("form_widget_serial_number").send_keys("example", u'\u0009')
所有文本框都具有相同的ID(form_widget_serial_number),因此无法通过使用id选择来选择特定的文本框(上面的代码选择第一个文本框, u'\ u0009'更改光标位置到下一个文本框)。
无论如何,如果光标位于当前文本框中,如何在不使用 find_element_by_id 或其他选择器的情况下将值发送到“当前”文本框?
答案 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)
我的方法是:
使焦点元素像
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()