selenium基本使用方式 自动化测试配置chrome driver环境变量python环境python --versionpip --versionpip install seleniumJava环境创建Java项目添加pom配置依赖import org.openqa.selenium.chrome.ChromeDriver;public class Main {public static void main(String[] args) {WebDriver webDriver new ChromeDriver();webDriver.get(“https://www.baidu.com”);}}成功打开了chrome浏览器说明配置成功webdriver API元素定位自动测试核心对象的定位webdriver提供了一系列的对象定位方法常见的id,name,class name,link text,partial link text,tag name,xpath,css selectorcss选择器定位元素//通过cssSelectorscc选择器定位元素 WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); WebElement css webDriver.findElement(By.cssSelector(.s_ipt)); if(cssnull){ System.out.println(未通过); }else{ System.out.println(通过); }xpath定位元素WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); WebElement xpt webDriver.findElement(By.xpath(//*[id\chat-submit-button\])); if(xptnull){ System.out.println(未通过); }else{ System.out.println(通过);标签定位元素WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); WebElement tag webDriver.findElement(By.tagName(jnput)); if(tagnull){ System.out.println(未通过); }else{ System.out.println(通过);close:关闭当前浏览器quit关闭当前浏览器彻底退出webdriver释放与driver server之间的连接、操作测试对象click点击对象send_keys:键盘输入数据clear清除对象输入内容submit提交text获取元素文本信息这个选择器匹配所有在a超链接内部的em强调标签。ListWebElement results webDriver.findElements(By.cssSelector(a em)); //清空输入框内容 ipt.clear();submit和click的区别submit必须放入form表单中否则会报错click没有任何限制模拟鼠标点击的过程推荐使用click添加等待强制等待sleeppythontime.sleep(10) 秒jav:Thread.sleep(10000)毫秒隐式等待是给 WebDriver设定的一个“全局超时时间”告诉它“在找不到元素时请耐心等待最多 X 秒”。显示等待是针对某个特定元素设定的“等待条件”告诉它“请一直等到这个元素满足某个条件隐式等待给find element设置一个全局的等待限度在限度内未找到元素时抛出NoSuchElementException异常执行过程执行find Element时立即去浏览器DOM中查找指定元素如果找到则直接返回不需要进行等待如果没找到则等待设定的时间并在时间内间断的进行查询如果在设定时间内未找到指定元素则抛出NoSuchElementException写法WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); // 隐式等待 webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);显示等待针对每个特定元素知道元素可以操作或则出现写法// 显示等待老版本写法 WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); WebDriverWait wait new WebDriverWait(driver, 10); WebElement element wait.until(ExpectedConditions.elementToBeClickable(By.id(su))); element.click();获取对应元素的属性值.getAttribute(“value”)value就是元素的属性值如果value为空则未nullWebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); WebElement webElement webDriver.findElement(By.cssSelector(#fw) webElement.getAttribute(class)打印元素相关信息获取浏览器titleWebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); //百度官网的title百度一下你就知道 String title webDriver.getTitle();获取浏览器网址WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); String url webDriver.getCurrentUrl();浏览器操作浏览器最大化webDriver.manage().window().miximize();设置浏览器高和宽webDriver.manage().window().setSize(new dimension(100,100)设置浏览器前进后退webDriver.navigate().forward(); webDriver.navigate().back();控制浏览器滚动条1、滚动到指定元素出现在视野中// 先定位到目标元素 WebElement element driver.findElement(By.id(footer)); // 方式1使用 JavaScript 滚动到该元素 ((JavascriptExecutor) driver).executeScript(arguments[0].scrollIntoView(true);, element); // 方式2滚动到元素并使其居中更平滑 ((JavascriptExecutor) driver).executeScript(arguments[0].scrollIntoView({block: center});, element);2、滚动到顶部或则底部//滚动到顶部 ((JavascriptExecutor) driver).executeScript(window.scrollTo(0, 0);); //滚动到底部 ((JavascriptExecutor) driver).executeScript(window.scrollTo(0, document.body.scrollHeight););3、滚动准确像素// 向下滚动 300 像素 ((JavascriptExecutor) driver).executeScript(window.scrollBy(0, 300);); // 向上滚动 100 像素 ((JavascriptExecutor) driver).executeScript(window.scrollBy(0, -100););4、使用Actions模拟键盘操作// 按下 Page Down 键页面下翻 new Actions(driver).sendKeys(Keys.PAGE_DOWN).perform(); // 按下 Page Up 键页面上翻 new Actions(driver).sendKeys(Keys.PAGE_UP).perform(); // 连续按 5 次 Page Down for (int i 0; i 5; i) { new Actions(driver).sendKeys(Keys.PAGE_DOWN).perform(); Thread.sleep(200); // 等待页面加载 }5、结合显示等待滚动到可交互// 先等待元素出现 WebDriverWait wait new WebDriverWait(driver, 10); WebElement element wait.until(ExpectedConditions.presenceOfElementLocated(By.id(submitBtn))); // 滚动到该元素 ((JavascriptExecutor) driver).executeScript(arguments[0].scrollIntoView(true);, element); // 等待元素变为可点击 wait.until(ExpectedConditions.elementToBeClickable(element)); element.click();模拟键盘操作1、sendkeys-直接发送按键import org.openqa.selenium.Keys; // 1. 输入后按回车搜索 driver.findElement(By.id(kw)).sendKeys(Selenium, Keys.ENTER); // 2. 输入后按 Tab 切换到下一个输入框 driver.findElement(By.id(username)).sendKeys(admin, Keys.TAB); // 3. 清空输入框全选 Delete driver.findElement(By.id(kw)).sendKeys(Keys.CONTROL a, Keys.DELETE); // 或 Ctrl Backspace driver.findElement(By.id(kw)).sendKeys(Keys.CONTROL a, Keys.BACK_SPACE);2、Action-组合键和长按Actions actions new Actions(webDriver); //ctrl a actions.keyDown(Keys.CONTROL) .sengKeys(a) .keyUp(Keys.CONTROL) .proform(); //ctrl c actions.keyDown(Keys.CONTROL) .sendKeys(c) .keyUp(Keys.CONTROL) .preform(); //ctrl v actions.keyDown(Keys.CONTROL) .sengKeys(v) .keyUp(Keys.CONTROL) .preform(); // 4. Shift 字母输入大写字母 actions.keyDown(Keys.SHIFT) .sendKeys(hello) // 会输入 HELLO .keyUp(Keys.SHIFT) .perform(); // 5. 多个按键组合Ctrl Shift Z重做 actions.keyDown(Keys.CONTROL) .keyDown(Keys.SHIFT) .sendKeys(z) .keyUp(Keys.SHIFT) .keyUp(Keys.CONTROL) .perform();切换窗口窗口的唯一标识窗口句柄window handle唯一标识每个浏览器窗口或标签页的字符串可以在不同的窗口之间切换焦点操作流程获取当前窗口WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com) String mainWindowHandle webDriver.getWindowHandle();打开执行新窗口的操作webDriver.findElement(By.linkText(“打开新窗口”)).click();获取所有窗口句柄setString allWindowHandles webDriver.getWindowHandles();遍历所有句柄切换新窗口for(String handle : allWindowHandle){ if(!handle.equals(mainWindowHandle)){ webDriver.switchTo().window(handle); break; } }在新窗口执行新操作//获取窗口Title String title webDriver.getTitle(); String copyPath E:\\截图保存 //进行窗口截图 File file ((TakesScreenShot)webDriver).getScreenShotAs(OutPutType.FILE) ; Files.copy(file.toPath(),Paths.get(copyPath);执行完操作后返回主窗口webDriver.close(); webDriver.switchTo().window(mainWindowHandle);实践操作WebDriver webDriver new ChromeDriver(); webDriver.get(https://www.baidu.com); String mainWindowHandle webDriver.getWindowHandle(); System.out.println(mainWindowHandle); Thread.sleep(1000); webDriver.findElement(By.linkText(新闻)).click(); SetString windowHandles webDriver.getWindowHandles(); for(String handle : windowHandles){ if(!handle.equals(mainWindowHandle)){ webDriver.switchTo().window(handle); break; } } System.out.println(窗口新窗口标题webDriver.getTitle()); //截取页面 String timestamp String.valueOf(System.currentTimeMillis()); File file ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE); String path C:\\Users\\gonghao\\Desktop\\Founderintl\\screenshottimestamp.png; Files.copy(file.toPath(), Paths.get(path), StandardCopyOption.REPLACE_EXISTING); }复选框操作选择所有复选框WebDriver webDriver new ChromeDriver(); webDriver.get(); for(WebElement element : webDriver.findElements(By.cssSelector(input[tyoecheckbox]))){ if(!element.isSelected()){ element.click(); } }取消所有复选框WebDriver webDriver new ChromeDriver(); webDriver.get(); for(WebElement webElement : webDriver.findElements(By.cssSelector(input[typecheckbox])){ if(webElement.isSelected()){ webElement.click(); } }取消特定值的复选框WebDriver webDriver new ChromeDriver(); webDriver.get(); WebElement webElement1 webDriver.findElement(By.cssSelector(input[value1])).click(); WebELement webElement2 webDriver.findElement(By.cssSelector(input[value2])).click();通过标签文本定位WebDriver webDriver new ChromeDriver(); webDriver.get(); driver.findElement(By.xpath());定位下拉框选项下拉框是类型现有如下下拉框select idcity option valuebj北京/option option valuesh上海/option option valuegz广州/option /select定位WebDriver webDriver new ChromeDriver(); webDriver.get(); WebElement selectot webDriver.findElement(By.cssSelector(select)) Select select new Select(webDriver); //bj select.selectByIndex(0); //sh select.selectByValue(sh); //gz select.selectByVisibleText(广州);获取当前选中的选项WebElement selectedOption select.getFirstSelectedOption(); selectedOption.getText();获取全部选中的选项ListWebElement selecteds select.getOptions(); for(WebElement option : selecteds){ system.out.println(option.getText()); } //判断下拉框是否支持多选 select.isMultiple(); //取消所有下拉框选择 select.deselectAll();下拉框不是类型有些前端框架如 Vue/React会使用div或ul模拟下拉框此时不能用Select类。需要模拟点击 选择操作// 1. 点击展开下拉框 driver.findElement(By.cssSelector(.dropdown-trigger)).click(); // 2. 从下拉列表中选择目标项 driver.findElement(By.xpath(//li[text()上海])).click();下拉框可能是动态刷新建议加上显示等待WebDriverWait wait new WebDriverWait(driver, 10); // 等待下拉框可见 WebElement dropdown wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(city))); // 创建 Select 对象 Select select new Select(dropdown); select.selectByVisibleText(上海);

本月热点