35人参与 • 2025-09-22 • Javascript
你是否遇到过这些痛点:
答案就是selenium webdriver + javascript注入!通过直接执行javascript代码,.net程序的浏览器操作效率可以实现300%的飞跃。本文将用3大核心技巧+2个实战案例,手把手教你从零掌握javascript注入的“核武器”,让你的自动化测试像火箭一样飞!
click()方法需等待dom加载nosuchelementexception对比传统点击 vs javascript注入:
| 方式 | 优点 | 局限性 |
|---|---|---|
| 传统点击 | 实现简单 | 依赖dom稳定性 |
| javascript注入 | 高效灵活 | 需要javascript知识 |
click()、change()事件executeasync处理延迟加载内容案例:百度搜索框输入“selenium webdriver”
传统点击:
var searchbox = driver.findelement(by.id("kw"));
searchbox.sendkeys("selenium webdriver");
var submitbutton = driver.findelement(by.id("su"));
submitbutton.click();
javascript注入:
((ijavascriptexecutor)driver).executescript("document.getelementbyid('kw').value = 'selenium webdriver';");
((ijavascriptexecutor)driver).executescript("document.getelementbyid('su').click();");
案例:触发下拉菜单的change事件
传统点击:
var dropdown = driver.findelement(by.id("mydropdown"));
dropdown.click();
var option = driver.findelement(by.xpath("//option[@value='2']"));
option.click();
javascript注入:
var dropdown = driver.findelement(by.id("mydropdown"));
((ijavascriptexecutor)driver).executescript("arguments[0].value = '2';", dropdown);
((ijavascriptexecutor)driver).executescript("new event('change', { bubbles: true });", dropdown);
案例:等待动态加载的图片
传统等待:
webdriverwait wait = new webdriverwait(driver, timespan.fromseconds(10));
wait.until(d => d.findelement(by.id("myimage")).displayed);
javascript注入:
((ijavascriptexecutor)driver).executeasyncscript(@"
var callback = arguments[arguments.length - 1];
var img = document.getelementbyid('myimage');
if (img.complete) {
callback('loaded');
} else {
img.onload = function() { callback('loaded'); };
}
");
需求:自动输入关键词并截图
完整代码:
using openqa.selenium;
using openqa.selenium.chrome;
using system;
class program
{
static void main(string[] args)
{
// 初始化chromedriver
chromedriver driver = new chromedriver();
driver.navigate().gotourl("https://www.baidu.com");
// 设置javascript执行超时时间
driver.manage().timeouts().asynchronousjavascript = timespan.fromseconds(20);
// 执行javascript输入和点击
((ijavascriptexecutor)driver).executescript("document.getelementbyid('kw').value = 'selenium webdriver';");
((ijavascriptexecutor)driver).executescript("document.getelementbyid('su').click();");
// 等待页面加载
system.threading.thread.sleep(2000);
// 截图保存
screenshot screenshot = ((itakesscreenshot)driver).getscreenshot();
screenshot.saveasfile("e:/baidu.png", screenshotimageformat.png);
driver.quit();
}
}
需求:等待图片加载完成后再截图
完整代码:
using openqa.selenium;
using openqa.selenium.chrome;
using system;
class program
{
static void main(string[] args)
{
chromedriver driver = new chromedriver();
driver.navigate().gotourl("https://example.com/dynamic-image");
// 使用javascript等待图片加载
((ijavascriptexecutor)driver).executeasyncscript(@"
var callback = arguments[arguments.length - 1];
var img = document.getelementbyid('dynamicimage');
if (img.complete) {
callback('loaded');
} else {
img.onload = function() { callback('loaded'); };
}
");
// 截图保存
screenshot screenshot = ((itakesscreenshot)driver).getscreenshot();
screenshot.saveasfile("e:/dynamic.png", screenshotimageformat.png);
driver.quit();
}
}
错误示例:
// 使用旧版chromedriver操作新版chrome浏览器 chromedriver driver = new chromedriver(); // 可能报错
正确做法:
// 通过nuget安装对应版本的selenium.chrome.webdriver install-package selenium.chrome.webdriver -version 75.0.0
错误示例:
driver.execute("document.getelementbyid('kw').value = 'selenium';"); // 编译错误
正确做法:
((ijavascriptexecutor)driver).executescript("document.getelementbyid('kw').value = 'selenium';");
错误示例:
driver.executeasyncscript("settimeout(function() { alert('done'); }, 2000);"); // 无返回值
正确做法:
var result = driver.executeasyncscript(@"
var callback = arguments[arguments.length - 1];
settimeout(function() { callback('done'); }, 2000);
");
console.writeline(result); // 输出 "done"
executeasyncscript处理延迟加载内容我曾为一个动态加载的图片等待问题熬了3个通宵,直到发现“javascript注入+异步回调”的奥秘才柳暗花明。记住:没有银弹。javascript注入的价值在于你如何用它——是用于精准控制还是继续暴力点击,取决于你的初心。
以上就是.net操作浏览器执行js的方法步骤的详细内容,更多关于.net操作浏览器执行js的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论