电商网站规划,昆明网站建设推广公司哪家好,wordpress网站添加备案号,网页设计与制作教程实验报告目录
一、浏览器及窗口操作
二、键盘与鼠标操作
三、勾选复选框
四、多层框架/窗口定位
五、操作下拉框
六、上传文件操作 七、处理弹窗与 alert
八、处理动态元素
九、使用 Selenium 进行网站监控 前言
Selenium 是一款非常强大的 Web 自动化测试工具#xff0c;能够…
目录
一、浏览器及窗口操作
二、键盘与鼠标操作
三、勾选复选框
四、多层框架/窗口定位
五、操作下拉框
六、上传文件操作 七、处理弹窗与 alert
八、处理动态元素
九、使用 Selenium 进行网站监控 前言
Selenium 是一款非常强大的 Web 自动化测试工具能够帮助开发者与测试人员进行浏览器的自动化操作。通过 Selenium您不仅可以进行传统的自动化测试还可以实现网站监控、动态元素处理、用户交互等高级功能。本文将详细介绍 Selenium 的一些常见操作包括浏览器控制、元素交互、截图、文件上传、动态元素等待等以及如何用 Selenium 实现网站监控。
一、浏览器及窗口操作
Selenium 提供了丰富的 API 进行浏览器的控制和操作下面是一些常见的浏览器窗口操作
1.1 打开网页与基本浏览器操作
WebDriver webDriver new ChromeDriver();
webDriver.get(https://www.baidu.com); // 打开百度首页
webDriver.findElement(By.cssSelector(#kw)).sendKeys(迪丽热巴); // 搜索
webDriver.findElement(By.cssSelector(#su)).click(); // 点击搜索1.2 前进、后退与刷新
webDriver.navigate().back(); // 浏览器后退
webDriver.navigate().refresh(); // 刷新
webDriver.navigate().forward(); // 浏览器前进1.3 浏览器窗口操作
滚动条操作
((JavascriptExecutor) webDriver).executeScript(document.documentElement.scrollTop10000); // 向下滚动页面最大化与全屏
webDriver.manage().window().maximize(); // 最大化浏览器
webDriver.manage().window().fullscreen(); // 全屏浏览器设置窗口大小与位置
webDriver.manage().window().setSize(new Dimension(800, 600)); // 设置窗口大小
Dimension size webDriver.manage().window().getSize(); // 获取窗口大小
webDriver.manage().window().setPosition(new Point(100, 100)); // 设置窗口位置
Point position webDriver.manage().window().getPosition(); // 获取窗口位置1.2 浏览器截图操作 需要导入依赖包如Commons IO进行截图操作 dependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.8.0/version
/dependency
private static void takeScreenshot() throws IOException {WebDriver webDriver new ChromeDriver();webDriver.get(https://www.baidu.com/);webDriver.findElement(By.cssSelector(#kw)).sendKeys(软件测试);webDriver.findElement(By.cssSelector(#su)).click();sleep(3000);// 截图并保存File file ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);FileUtils.copyFile(file, new File(d://测试.png));
}二、键盘与鼠标操作
Selenium 提供了 Actions 类来模拟鼠标操作和 Keys 类来模拟键盘操作。包括文本输入、按键和组合键序列增强自动化脚本的用户交互能力
2.1键盘操作
通过sendKeys()调用
单个使用
sendKeys(Keys.TAB) # TABsendKeys(Keys.ENTER) # 回车sendKeys(Keys.SPACE) #空格键sendKeys(Keys.ESCAPE) #回退键Esc
组合使用
sendKeys(Keys.CONTROL,‘a’) #全选CtrlAsendKeys(Keys.CONTROL,‘c’) #复制CtrlCsendKeys(Keys.CONTROL,‘x’) #剪贴CtrlXsendKeys(Keys.CONTROL,‘v’) #粘贴CtrlV
WebDriver webDriver new ChromeDriver();
webDriver.get(https://www.baidu.com);
webDriver.findElement(By.cssSelector(#kw)).sendKeys(迪丽热巴);// 组合键操作
webDriver.findElement(By.cssSelector(#kw)).sendKeys(Keys.CONTROL, A); // 全选
webDriver.findElement(By.cssSelector(#kw)).sendKeys(Keys.CONTROL, X); // 剪切
webDriver.findElement(By.cssSelector(#kw)).sendKeys(Keys.CONTROL, V); // 粘贴2.2 鼠标操作
通过ActionChains 类实现鼠标执行的操作
contextClick() 右击doubleClick() 双击dragAndDrop() 拖动moveToElement() 移动selenium不能模拟鼠标滚轮操作
WebDriver webDriver new ChromeDriver();
webDriver.get(https://www.baidu.com);
WebElement element webDriver.findElement(By.cssSelector(#kw));// 鼠标右击
Actions actions new Actions(webDriver);
actions.moveToElement(element).contextClick().perform(); // 右键点击三、勾选复选框
选中一组type为checkbox的数据
private static void selectCheckboxes() {WebDriver webDriver new ChromeDriver();webDriver.get(http://localhost:63342/Test/src/main/page/teste01.html);ListWebElement elements webDriver.findElements(By.cssSelector(input));for (WebElement element : elements) {if (checkbox.equals(element.getAttribute(type))) {element.click(); // 勾选复选框}}
}四、多层框架/窗口定位 对于一个web 应用经常会出现框架iframe 或窗口window的应用对于这种应用我们在定位元素时就不能直接右击copy他的xpath或者是cssselector来定位而是要通过switchTo方法定位到frame下或者window下然后再通过元素css选择器或者xpath定位。
例如 private static void page02() {// 创建浏览器驱动WebDriver webDriver new ChromeDriver();// 打开网页webDriver.get(http://localhost:63342/Test/src/main/page/test02.html?_ijtukda3p0a62ntrthar4gi039p32_ij_reloadRELOAD_ON_SAVE);// 若是iframe应用需要先定位到frame下再定位到clickwebDriver.switchTo().frame(f1);webDriver.findElement(By.cssSelector(body div div a)).click();// 若目标元素不在iframe可以直接获取
// String h3_text webDriver.findElement(By.cssSelector(body div div h3)).getText();
// System.out.println(h3_text);}4.1 iframe
private static void switchToIframe() {WebDriver webDriver new ChromeDriver();webDriver.get(http://localhost:63342/Test/src/main/page/test02.html);webDriver.switchTo().frame(f1);webDriver.findElement(By.cssSelector(body div div a)).click();
}4.2 窗口
private static void switchWindow() {WebDriver webDriver new ChromeDriver();webDriver.get(https://www.baidu.com/);webDriver.findElement(By.cssSelector(#s-top-left a:nth-child(1))).click();// 获取所有窗口句柄并切换SetString handles webDriver.getWindowHandles();String targetHandle handles.iterator().next();webDriver.switchTo().window(targetHandle);webDriver.findElement(By.cssSelector(#ww)).sendKeys(新闻联播);webDriver.findElement(By.cssSelector(#s_btn_wr)).click();
}五、操作下拉框
下拉框里的内容需要进行两次定位
定位到下拉框本身进行操作定位到下拉框内的选项。
private static void page03() {// 创建浏览器驱动WebDriver webDriver new ChromeDriver();// 打开网页webDriver.get(http://url地址);// 操作下拉框Select select new Select(webDriver.findElement(By.cssSelector(#ShippingMethod)));// select.selectByValue(12.51); // 可按值选择select.selectByIndex(2); // 按索引选择
}六、上传文件操作
在 Selenium WebDriver 中只需定位上传按钮通过 sendKeys 方法添加本地文件路径即可。 可以使用绝对路径或相对路径前提是上传的文件存在。
private static void page05() {WebDriver webDriver new ChromeDriver();webDriver.get(http://url地址);// 找到上传按钮input元素并输入本地文件路径webDriver.findElement(By.cssSelector(input)).sendKeys(C:\\Users\\34085\\Desktop\\hello.txt);
}七、处理弹窗与 alert
使用 Alert 类处理浏览器弹窗。
private static void handleAlert() {WebDriver webDriver new ChromeDriver();webDriver.get(http://url地址);webDriver.findElement(By.cssSelector(button)).click();// 处理 alert 弹窗webDriver.switchTo().alert().accept(); // 点击确认webDriver.switchTo().alert().dismiss(); // 点击取消webDriver.switchTo().alert().sendKeys(你好); // 输入文本webDriver.switchTo().alert().accept(); // 确认
}八、处理动态元素
动态元素通常在页面加载后通过 JavaScript 动态生成。可以通过显式等待和隐式等待来处理动态元素。
1. 使用 WebDriverWait 和 ExpectedConditions
动态元素可以使用 WebDriverWait 和 ExpectedConditions 来等待元素在页面上可见或可点击。
WebDriverWait wait new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(dynamicElement)));2. 根据部分属性值定位
如果元素的 ID 或 class 是动态生成的可以使用 XPath 中的 contains()、starts-with() 和 ends-with() 函数来定位。
// 匹配包含 auto-id 的 ID 元素
driver.findElement(By.xpath(//div[contains(id, auto-id)]));3. 根据相对关系定位
如果动态元素与其父节点、子节点或兄弟节点有固定的相对关系可以通过这些关系来定位动态元素。
4. 根据 DOM 顺序索引定位
可以通过元素在 DOM 中的顺序索引来定位该元素。但这种方法可能不够稳定建议尽量使用其他方法。
5. 使用 CSS 选择器
CSS 选择器提供了一种灵活的方式来定位元素特别是当元素的 ID 或 class 是动态生成时。例如可以通过 CSS 属性选择器定位元素。
driver.findElement(By.cssSelector(input[typetext]));6. 结合使用多种定位方法
在某些情况下结合使用多种定位方法可以提高准确性和成功率。例如可以先通过 CSS 选择器定位父元素再通过相对路径定位子元素。
7. 优化等待时间
动态元素的加载可能需要一些时间因此合理设置等待时间对于提高脚本稳定性至关重要。避免使用硬编码的等待时间如 Thread.sleep而应使用 WebDriverWait 来动态等待元素加载完成。 九、使用 Selenium 进行网站监控
9.1 监听网页内容变化
public class PriceWatcher {public static void main(String[] args) throws InterruptedException {System.setProperty(webdriver.chrome.driver, chromedriver的地址);WebDriver driver new ChromeDriver();driver.get(http://url地址);String previousPrice ;while (true) {WebElement priceElement driver.findElement(By.id(price));String currentPrice priceElement.getText();if (!currentPrice.equals(previousPrice)) {System.out.println(价格变动 currentPrice);previousPrice currentPrice;}Thread.sleep(5000); // 每5秒检查一次}}
}9.2 监控网络请求
public class MonitorHttpRequests {public static void main(String[] args) {BrowserMobProxy proxy new BrowserMobProxyServer();proxy.start(0);Proxy seleniumProxy ClientUtil.createSeleniumProxy(proxy);ChromeOptions options new ChromeOptions();options.setProxy(seleniumProxy);WebDriver driver new ChromeDriver(options);proxy.newHar(myHar);driver.get(http://url地址);ListHarEntry entries proxy.getHar().getLog().getEntries();for (HarEntry entry : entries) {System.out.println(请求网址: entry.getRequest().getUrl());System.out.println(响应状态: entry.getResponse().getStatus());}driver.quit();proxy.stop();}
}总结 Selenium 是一个非常强大的自动化测试工具除了传统的自动化测试应用它还可以用于浏览器操作、动态元素处理、表单交互等多个场景。结合合理的等待机制、弹窗处理和网站监控等功能Selenium 不仅可以帮助开发人员进行高效的测试还能在实际应用中解决更多问题。
希望本文的分享能帮助您更好地理解和应用 Selenium