• 【selenium】三大切换 iframe 弹窗alert 句柄window 和 鼠标操作


    目录

    一、iframe

    1、切换方式:

    1、第一种情况:

    2、第二种情况:

    方式1:

    先找到iframe,定位iframe元素(可以通过元素定位的各种方式:xpath,css等等),用对象接收,再去跳转

    方式2:通过frame序号——不推荐⚠️

    2、跳转到父级iframe中

    3、切换到默认iframe

    总结:

    二、切换Alert(提示框)

    三、切换Window 句柄

    四、鼠标操作


    一、iframe

    当想要定位iframe中的元素时,由于driver的焦点还停留在原页面,我们在iframe新的页面上定位元素时,自然会产生错误:【报错:no such element: Unable to locate element】

    所以我们需要将driver的焦点切换到iframe页面中。

    java中iframe的三个重载方法

    1、切换方式:

    1、第一种情况:

    frame有具体的name 和 id 属性(id和name的属性值如果是动态变化的数字 就不能使用)

    ——直接通过id或name属性切换iframe

    driver.switchTo().frame("mainFrame");
    2、第二种情况:

    frame标签本身没有id 和 name 属性 或者 其是动态

    方式1:
    先找到iframe,定位iframe元素(可以通过元素定位的各种方式:xpath,css等等),用对象接收,再去跳转
    1. WebElement mainFrame = driver.findElementByName("mainFrame");
    2. driver.switchTo().frame("mainFrame");
    方式2:通过frame序号——不推荐⚠️
    1.  # 根据需要填入index,这里定位HTML里的第一个
    2. iframe = driver.find_elements_by_tag_name("iframe")[0]  
    3. driver.switch_to.frame(iframe)

    2、跳转到父级iframe

    如果是顶级iframe,不会有任何变化

    driver.switchTo().parentFrame()

    3、切换到默认iframe

    一般就是最外层网页。当有超过两层以上的iframe嵌套,使用此方法可直接跳到最外层

    driver.switchTo().defaultContent()

    总结:

    iframe往内层iframe进,只能一层层进,跳出去可以直接跳出最外面,iframe是一层一层往里面切

    二、切换Alert(提示框)

    1. alert.getText()——获取警告框中的提示信息
    2. alert.accept()——点击确认按钮
    3. alert.dismiss()——取消

    alert 操作示例:

    alert 页面代码:

    1. html>
    2. <html>
    3. <head>
    4. <title>a.htmltitle>
    5. head>
    6. <body>
    7. <input type="text" name="">
    8. body>
    9. <script type="text/javascript">
    10. //confirm(确认到充值么)
    11. if(confirm("确认到充值么?")){
    12. alert("充值成功")
    13. }
    14. else{
    15. alert("取消充值")
    16. }
    17. script>
    18. html>

    alert操作代码:

    1. //得到alert框
    2. Alert alert = driver.switchTo.alert();
    3. //获取内容
    4. System.out.println(alert.getText());
    5. //点击取消
    6. alert.dismiss();
    7. //再次点击确定 可以在alert原来操作的基础上直接再次点击
    8. alert.accept();

    三、切换Window 句柄

    当我们点击了 a 标签元素时,会触发打开链接页面的事件,有两种情形:

    1. 在当前窗口加载新页面内容

    2. 新建一个窗口加载新页面内容,这种情况在 a 标签有 target="_blank" 时触发

    当发生第2种情况时,同iframe类似,我们需要切换窗口

    切换方式:

    传入要操作窗口的handle句柄 --窗口的标识,唯一,并且是一串字符串来的

    句柄(handle):selenium为每一个窗口分配的值,每一次都是不同的

    切换方式:

    driver.switchTo.window(nameOrHandle);

    name一般没人用,Handle句柄,如何获取到窗口的句柄呢:

    1. driver.getWindowHandle();获取当前操作窗口的句柄,返回set集合,无序
    2. driver.getWindowHandles();获取测试时打开的所有窗口句柄

    四、鼠标操作

    自动化测试时,有些元素不适合直接点击或者进行某些操作时,可以使用Selenium的Actions类(鼠标操作类)来模拟鼠标键盘操作,通过Actions对象可以发起鼠标左键、右键、移动鼠标等操作,最后使用perform方法执行操作。

    1. clickAndHold() //在特定元素上单击鼠标左键(不释放)
    2. release() //在特定元素上释放鼠标左键
    3. doubleClick() //在特定元素上双击鼠标左键
    4. moveToElement() //移动鼠标指针到特定元素
    5. contextClick() //在特定元素上右键单击
    6. dragAndDrop() //拖拽元素
    7. perform() //执行具体的操作,前面6个方法都是声明一个操作,只有调用perform()后才会真正执行操作

    Actions:  在操作一个页面元素的时候需要一连串的动作配合的时候,可以使用Actions来完成

    1. //鼠标操作类
    2. //创建对象
    3. Actions action = new Actions(driver);
    4. actions.clickAndHold(onElement).moveToElement(toElement).release().build().perform();

    案例:ZTREE DEMO - drag & drop

    拖拽一个元素到另一个元素的位置

    1.   //按住一个元素,移动到另一个元素处,释放
    2. action.clickAndHold(treeDemo_2_span).moveToElement(treeDemo_11_span).release().perform();
    3.   //拖拽 dragAndDrop(源,目标) 同上面效果一样
    4. action.dragAndDrop(treeDemo_2_span,treeDemo_11_span).perform();

  • 相关阅读:
    linux命令-tar 命令
    [附源码]计算机毕业设计springboot在线票务系统
    理解FPGA中的亚稳态
    JavaScript笔记8-DOM中的事件、获取元素、操作元素
    解决Vue中ecahrts组件不能自适应问题
    【SpringBoot3.x教程03】SpringBoot自动配置详解
    XSS渗透与防御
    跟艾文学编程《Python数据可视化》(01)基于Plotly的动态可视化绘图
    iOS UITableView获取到的contentSize不正确
    [ AT_agc009_c]Division into Two
  • 原文地址:https://blog.csdn.net/weixin_40772077/article/details/136230899