import org.junit.*; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import java.nio.file.Path; import java.nio.file.Paths; import java.time.Duration; import java.util.Set; /*1.需要配置selenium 相关的依赖 <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.16.1</version> </dependency> 2.需要注意的是浏览器驱动版本需要和浏览器版本一直比如 浏览器版本99.0.4844.51驱动版本也需要99.0.4844.51 驱动去http://www.jianshu.com/p/305ea89b87e9下载然后解压出来放在src包下 建立个子包 3.selenium 只支持火狐浏览器FirefoxDriver() 谷歌浏览器ChromeDriver() win10自带的浏览器EdgeDriver(); ie浏览器 InternetExplorerDriver() 通过WebDrive new 创建对象 */ public class testclass { // 创建浏览器对象 public WebDriver wangzhan; //@Before表示单元测试运行之前执行方法 @Before public void qian() { //Paths.get需要输入表示驱动地址 Path p1 = Paths.get("src\\javas\\msedgedriver.exe"); //配置驱动系统路径webdriver.chrome.driver是固定后面加上下载好的驱动地址 2.参照上面写的放 System.setProperty("webdriver.chrome.driver", p1.toAbsolutePath().toString()); /* 创建浏览器实例用来操作网页行为对象ChromeDriver表示谷歌浏览器如果需要其他浏览器也可以选择 */ wangzhan = new EdgeDriver(); //最大化网页 wangzhan.manage().window().maximize(); //调用get表示需要打开的网址 wangzhan.get("https://account.aliyun.com/"); //刷新浏览器 wangzhan.navigate().refresh();
} //测试方法 // @Test public void testtest() throws InterruptedException { //定位 //*1.findElement(By.id("kw"))表示定位 去前端页面获取搜索框获取id名字定位搜索框 /*2.可以使用By.id来定位也可以使用By.class或者by.name来定位 也可以通过css表达式来定位比如By.xpath("//*[@id=\"navs_1\"]")*/ // 3 .//*[@class="bg s_btn"] 表示搜索看看有没有页面有没有相同属性 //*表示从任意位置开始查找 @表示匹配的属性 ctrl+f来搜索相同属性 /*4.//a[@class="bg s_btn" and text()="酒店"] //a表标签名and text() 表示可以且其他属性text()表示文本内容*/ // 5.sendKeys("洛克王国")表示搜索框里面需要搜索的内容 wangzhan.findElement(By.id("kw")).sendKeys("洛克王国"); //click();表示点击行为 wangzhan.findElement(By.id("su")).click(); Thread.sleep(3000); } //点击行为 // @Test public void sheshi() throws InterruptedException { //click();表示点击行为 //*[@id="navs_2"] // wangzhan.findElement(By.id("navs_1")).click(); wangzhan.findElement(By.xpath("//*[@id=\"navs_1\"]")).click(); Thread.sleep(3000); } //给界面添加动作监听模拟鼠标行为 // @Test public void ceshmose() throws InterruptedException { //模拟过程中鼠标不能移动或者操作否则运行失败 //监听网页绑定动作 Actions js = new Actions(wangzhan); //用浏览器对象定位属性 WebElement gengdiou = wangzhan.findElement(By.linkText("更多")); Thread.sleep(6000); //moveToElement获取位置模拟鼠标移动 js.moveToElement(gengdiou); // By.xpath 定位 WebElement element = wangzhan.findElement(By.xpath("//a[@class=\"img-spacing\"and @name=\"tj_mp3\" ]")); //moveToElement移动 2.click()点击 3.perform();执行操作 js.moveToElement(element).click().perform(); } //模拟鼠标拖拽点击行为 // @Test public void ceshi2(){ Actions hc = new Actions(wangzhan); WebElement mask = wangzhan.findElement(By.id("mask")); //获取位置右键等待三秒 hc.moveToElement(mask).contextClick().pause(3000); WebElement cmitem_start = wangzhan.findElement(By.id("cmitem_start")); //移动鼠标点击 hc.moveToElement(cmitem_start).click(); //表示按住左键不松 hc.clickAndHold(); //拖拽位置 hc.moveByOffset(200,100); //松开左键 hc.release(); //点击右键 hc.contextClick(); //停止3秒 hc.pause(3000); //获取终点位置 WebElement cmitem_end = wangzhan.findElement(By.id("cmitem_end")); //移动点击 hc.moveToElement(cmitem_end).click().perform(); } //切换网页 // @Test public void cesshi6() throws InterruptedException { //不模仿鼠标操作鼠标可以自由活动 wangzhan.findElement(By.linkText("学术")).click(); //获取当前网页位置这里是字符串类还有一种是iframe类注意 String windowHandle = wangzhan.getWindowHandle(); System.out.println(windowHandle); //获取所有网页位置 Set<String> windowHandles = wangzhan.getWindowHandles(); for (String handle : windowHandles) { //不等于当前网页执行切换操作 if(handle != windowHandle ){ wangzhan.switchTo().window(handle ); } } wangzhan.findElement(By.xpath("//*[text()=\"我知道了\"]")).click(); wangzhan.findElement(By.xpath("//input[@name=\"wd\"]")).sendKeys("洛克王国"); wangzhan.findElement(By.xpath("//*[@id=\"su\"]")).click(); wangzhan.switchTo().window(windowHandle); } //嵌套网页登录操作 // @Test public void ceshi7() throws InterruptedException { //这里要仔细查看是不是iframe属性的内嵌网页才能切换,不是网页可直接操作 //这里是iframe类 WebElement element = wangzhan.findElement(By.id("alibaba-login-box" )); //frame切换指定网页按照WebElement 类切换 wangzhan.switchTo().frame(element); wangzhan.findElement(By.id("fm-login-id")).sendKeys("123456"); } // 隐示等待就是说一直搜索当前界面设置时间全局等待 // @Test public void ceshi8(){ // 设置等待时间6秒 wangzhan.manage().timeouts().implicitlyWait(Duration.ofSeconds(6)); WebElement element = wangzhan.findElement(By.id("alibaba-login-box" )); //frame切换指定网页按照WebElement 类切换 wangzhan.switchTo().frame(element); wangzhan.findElement(By.id("fm-login-id")).sendKeys("123456"); } //显示等待就是说一直搜索每一个方法或者某一项界面设置时间 @Test public void ceshi9() throws InterruptedException { // 设置页面等待时间10秒 WebDriverWait webDriverWait = new WebDriverWait(wangzhan, Duration.ofSeconds(10)); //设置要等待那一个属性的出现 WebElement until = webDriverWait.until(ExpectedConditions.presenceOfElementLocated(By.id("alibaba-login-box"))); //frame切换指定网页按照WebElement 类切换 wangzhan.switchTo().frame(until ); wangzhan.findElement(By.id("fm-login-id")).sendKeys("123456"); wangzhan.findElement(By.name("fm-login-password")).sendKeys("jige666"); wangzhan.findElement(By.xpath("//*[@class=\"fm-button fm-submit password-login\"]")).click(); } //@After表示单元测试运行之后执行方法 @After public void hou() throws InterruptedException { Thread.sleep(3000); //关闭浏览器 wangzhan.quit(); } }