注:如果已经切换进入了其中的一个 iframe 中,再想对 iframe 外的元素进行操作,需要切换回到默认的页面中,否则会找不到元素。
// 切换到默认内容页面 driver.switchTo().defaultContent(); 7.3.浏览器窗口的切换 有时候后在操作浏览器,可能打开了一个新的窗口,这个时候如果要对新窗口的元素进行操作,需要切换到新窗口中去,怎么去切换呢?在 selenium 中有个叫句柄的概念。
什么是句柄,简单理解就是浏览器窗口的一个标识,浏览器打开的每个窗口都有唯一的一个标识,也就是句柄,我们可以通过句柄来进行窗口之间的切换,从而来达到我们操作不同窗口的元素。
WebDriver 中提供了两个 API 来获取窗口的相关句柄:
// 获取当前窗口的句柄 String handle = driver.getWindowHandle(); // 获取所有窗口的句柄,返回一个集合 Set<String> handles = driver.getWindowHandles();获取到句柄后,通过对应的方法进行切换:
// 切换到窗口 driver.switchTo.windwo(String handle);多窗口之间的切换方法:
/** * 切换窗口的方法 * 通过传入一个标题来找到我们需要的窗口。 * @param title 窗口的标题 */ public void switchWindow(String title){ Set<String> handles = driver.getWindowHandles(); // 切换窗口的方式--循环遍历handles集合 for (String handle : handles) { //判断是哪一个页面的句柄??--根据什么来判断???title if(driver.getTitle().equals(title)){ break; }else{ //切换窗口--根据窗口标识来切换 driver.switchTo().window(handle); } } 7.4.select 下拉框处理如果一个页面元素是一个下拉框(select),对应下拉框的操作,selenium有专门的类 Select 进行处理。其中包含了单选和多选下拉框的各种操作,如获得所有的选项、选择某一项、取消选中某一项、是否是多选下拉框等。
Select类常用的一些方法:
方法 说明void () 取消所有选择项,仅对下拉框的多选模式有效,若下拉不支持多选模式,则会抛出异常 UnsupportedOperationException(不支持的操作)
void (int index) 取消指定index的选择,index从零开始,仅对多选模式有效,否则抛出异常 UnsupportedOperationException(不支持的操作)
void (String value) 取消Select标签中,value为指定值的选择,仅对多选模式有效,否则抛出异常 UnsupportedOperationException(不支持的操作)
void (String Text) 取消项的文字为指定值的项,例如指定值为Bar,项的html为 Bar,仅对多选模式有效,单选模式无效,但不会抛出异常
ListgetAllSelectedOptions() 获得所有选中项,单选多选模式均有效,但没有一个被选中时,返回空列表,不会抛出异常
WebElement getFirstSelectedOption() 获得第一个被选中的项,单选多选模式均有效,当多选模式下,没有一个被选中时,会抛出NoSuchElementException异常
ListgetOptions() 获得下拉框的所有项,单选多选模式均有效,当下拉框没有任何项时,返回空列表,不会抛出异常
boolean isMultiple() 判断下拉框是否多选模式
void (int index) 选中指定index的项,单选多选均有效,当index超出范围时,抛出NoSuchElementException异常
void (String value) 选中所有Select标签中,value为指定值的所有项,单选多选均有效,当没有适合的项时,抛出NoSuchElementException异常
void (String text) 选中所有项的文字为指定值的项,与deselectByValue相反,但单选多选模式均有效,当没有适合的项时,抛出NoSuchElementException异常
示例:2345网址导航首页的城市省份切换。
1.进入2345.com首页,点击头部【切换】进行城市切换,我们切换省份为北京。
2.HTML页面DOM结构。