(16)Java+Playwright自动化测试-iframe操作-监听事件和执行js脚本
1.简介
前边主要讲解和分享了一下iframe的基础知识,以及一些常见的定位方法,最后进行了一下总结。这篇主要来讲解和分享一下如何监听iframe上的事件和在iframe上如何执行JavaScript脚本代码。
2.Dialog
Dialog介绍官方API的文档地址:对话框 |Playwright Java
语法如下:
import com.microsoft.playwright.*;public class Example {public static void main(String[] args) {try (Playwright playwright = Playwright.create()) {BrowserType chromium = playwright.chromium();Browser browser = chromium.launch();Page page = browser.newPage();page.onDialog(dialog -> {System.out.println(dialog.message());dialog.dismiss();});page.evaluate("alert('1')");browser.close();}}
}
注意:对话框会自动关闭,除非有 Page.onDialog(handler) 侦听器。当侦听器存在时,它必须 Dialog.accept() 或 Dialog.dismiss() 确定或者取消对话框 - 否则页面将冻结等待对话框,并且单击等操作将永远不会完成。
3.监听iframe上的事件
iframe的事件可以通过page对象直接监听到。如下图所示:
3.1代码设计
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.FrameLocator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;public class Test_Dialog {public static void main(String[] args) {try (Playwright playwright = Playwright.create()) {//1.使用chromium浏览器,# 浏览器配置,设置以GUI模式启动Chrome浏览器(要查看浏览器UI,在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度。Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(3000));//2.创建contextBrowserContext context = browser.newContext();//创建pagePage page = context.newPage();//3.浏览器打开网站page.navigate("E:/Desktop/test/iframe/index.html");page.onDialog(dialog -> {System.out.println(dialog.message());dialog.accept();});//一层一层定位FrameLocator frame = page.frameLocator("#frameA");frame.locator("#alert").click();System.out.println("Test Pass");//关闭pagepage.close();//关闭browserbrowser.close();}}
}
3.3运行代码
1.运行代码,右键Run As->Java Application
3.将这段代码dialog.accept();注释后,看看会不会出现敲黑板的情况(页面将冻结等待对话框,并且单击等操作将永远不会完成)
4.执行js脚本
4.1在page对象执行js脚本
使用page.evaluate(js代码)方法可以直接在page对象上执行JavasScript 代码。
4.1.1代码设计
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;public class Test_Dialog {public static void main(String[] args) {try (Playwright playwright = Playwright.create()) {//1.使用chromium浏览器,# 浏览器配置,设置以GUI模式启动Chrome浏览器(要查看浏览器UI,在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度。Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(3000));//2.创建contextBrowserContext context = browser.newContext();//创建pagePage page = context.newPage();page.onDialog(dialog -> {System.out.println(dialog.message());dialog.accept();});page.evaluate("alert('Hello 程序员的世界你不懂')"); System.out.println("Test Pass");//关闭pagepage.close();//关闭browserbrowser.close();}}
}
4.1.3运行代码
1.运行代码,右键Run As->Java Application,就可以看到控制台输出
将这段代码dialog.accept();注释后,看看会不会出现敲黑板的情况(页面将冻结等待对话框,并且单击等操作将永远不会完成)
5.在iframe上执行js脚本
在iframe上执行JavaScript代码,需在iframe对象上执行。例如:在iframe的input中输入“程序员的世界你不懂”,如下图所示:
5.1代码设计
import com.microsoft.playwright.Browser;
import com.microsoft.playwright.BrowserContext;
import com.microsoft.playwright.BrowserType;
import com.microsoft.playwright.Frame;
import com.microsoft.playwright.FrameLocator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.Playwright;public class Test_Dialog {public static void main(String[] args) {try (Playwright playwright = Playwright.create()) {//1.使用chromium浏览器,# 浏览器配置,设置以GUI模式启动Chrome浏览器(要查看浏览器UI,在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度。Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(3000));//2.创建contextBrowserContext context = browser.newContext();//创建pagePage page = context.newPage();//3.浏览器打开网站page.navigate("E:/Desktop/test/iframe/index.html");//定位到要操作的iframeFrame frame = page.frame("frameA");//执行js 给iframe的输入框输入内容String js = "document.getElementById('iframeinput').value='北京-宏哥';";frame.evaluate(js);page.pause();System.out.println("Test Pass");//关闭pagepage.close();//关闭browserbrowser.close();}}
}
5.3运行代码
1.运行代码,右键Run As->Java Application,就可以看到控制台输出
6.小结
主要讲解和分享了一下iframe的监听事件和执行js脚本。其实也是运用了前边讲解的iframe定位方法,首先定位到iframe后,才能在iframe中进行对应的操作,如果定位不到,就不可能操作其内部的元素。