第十七节:switch_to.active_element 获取当前焦点元素

来源:互联网 发布:墨西哥菜 知乎 编辑:程序博客网 时间:2024/06/14 09:31

转载:http://blog.csdn.net/huilan_same/article/details/52338073



switch_to.active_element返回的是当前焦点的对象,即返回WebElement对象。

那么焦点是什么?大概可以这样理解:即网页上当前操作的对象(也就是你网页上光标的位置),比如,你鼠标点击到了一个input框,你可以在这个input框里输入信息,这时这个input框即焦点。

说了半天,到底什么时候会需要返回当前的焦点呢?下面这个例子可以更直观一些:

今天群里有人遇到这样的问题,一个网页上的新建文件夹的功能,右键-新建之后,在页面上有个输入文件夹名的input框,但这个框一旦失去焦点而且没有内容的话,就会消失、取消掉新建文件夹的操作。如图:

右键新建

填写文件夹名

最初的代码如下(部分):

...l = driver.find_element_by_id('pm_treeRoom_1_span')ActionChains(driver).context_click(l).perform()driver.find_element_by_class_name('fnew').click()time.sleep(2)driver.find_element_by_xpath('//*[@id="pm_treeRoom_1_ul"]/li[...]').send_keys('filename')time.sleep(2)...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

结果这种操作总会导致输入框失去焦点,直接消失,更不能send_keys进去了,直接报错。

我提醒用ActionChains的send_keys发送,不去重新定位元素,就用默认的焦点元素。修改后的代码如下(部分):

...driver.find_element_by_class_name('fnew').click()time.sleep(2)ActionChains(driver).send_keys('filename')time.sleep(2)...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果仍是失败,代码执行成功了。但是光标仍卡在输入框,输入框也没有输入任何信息。

没办法,只好祭出我的大招,用switch_to.active_element,看代码(部分):

driver.find_element_by_class_name('fnew').click()time.sleep(2)driver.switch_to.active_element.send_keys('filename')time.sleep(2)
  • 1
  • 2
  • 3
  • 4

结果:

成功

成功添加上了新的文件夹!

注意:active_element后面没有括号。

有上面的示例我想大家也大概明白了active_element的用法。当你想要获取当前焦点元素时,你就可以用它了。

API : Returns the element with focus, or BODY if nothing has focus.

原创粉丝点击