自动化测试能够代替一部分的手工测试。自动化测试能够提高测试效率。
随着版本的叠加,版本回归的压力也越来越大,通过人力测试回归版本是不现实的,因此需要借助自动化测试。
开源免费,支持多浏览器,支持多系统,支持多语言(java,python等),selenium包底层由很多可使用的API,
selenium工具包,Chrome浏览器,ChromeDriver谷歌驱动,java8及以上
驱动:通过一些操作,通过驱动程序完成某一种操作
驱动的工作原理:
- <dependency>
- <groupId>org.seleniumhq.seleniumgroupId>
- <artifactId>selenium-javaartifactId>
- <version>4.0.0version>
- dependency>
- public class TestSelectOnBaidu {
- public void run() throws InterruptedException {
- //创建谷歌驱动,用来打开谷歌浏览器
- ChromeDriver driver = new ChromeDriver();
- Thread.sleep(2000);
- //输入访问的网址
- driver.get("https://www.baidu.com");
- Thread.sleep(2000);
- //找到搜索框,输入
- driver.findElement(By.cssSelector("#kw")).sendKeys("王力宏");
- Thread.sleep(2000);
- //找到搜索按钮,点击
- driver.findElement(By.cssSelector("#su")).click();
- Thread.sleep(2000);
- //关闭驱动
- driver.quit();
- }
- }
1,
- //css选择器
- String text = driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).getText();
- System.out.println("新闻超连接的文本" + text);
层级:/次级,//跳级
属性:@
函数:contains() ,.....
- //xpath选择器
- driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("yyk");
- driver.findElement(By.xpath("//*[@id=\"su\"]")).click();
使用submit 的方法都可以使用click,能使用click的地方不一定能使用submit。
clear():清除对对象输入的文本。
gettext():获取文本
getAttribute():获取属性值
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("value"));
代码执行速度大于页面渲染的速度,所以在获取结果页面的一些元素文本属性时,会出现noSuchElementException,所以需要等待结果页面渲染完成。
等待分为显示等待,隐式等待,强制等待
优点:语法简单,适合调试使用,
缺点:浪费大量时间在等待上面,而使用自动化测试就是为了提高效率
- driver.findElement(By.cssSelector("#kw")).sendKeys("ykz");
- driver.findElement(By.cssSelector("#su")).click();
- System.out.println(driver.findElement(By.cssSelector("#\\33 > div > div:nth-child(1) > h3 > a")).getText());
- //强制等待
- driver.findElement(By.cssSelector("#kw")).sendKeys("ykz");
- driver.findElement(By.cssSelector("#su")).click();
- Thread.sleep(2000);
- System.out.println(driver.findElement(By.cssSelector("#\\33 > div > div:nth-child(1) > h3 > a")).getText());
强制等待会等待一段时间后再获取结果页面的内容
在规定的时间内,轮询等待元素出现后立即结束,如果规定时间内还没有出现,则会抛出一个No Such Element Exception异常
作用在driver的整个生命周期
- //隐式等待
- driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
- //隐式等待作用再driver 的整个生命周期
- driver.findElement(By.cssSelector("#kw")).sendKeys("ykz");
- driver.findElement(By.cssSelector("#su")).click();
- System.out.println(driver.findElement(By.cssSelector("#\\33 > div > div:nth-child(1) > h3 > a")).getText());
隐式等待的缺点:需要等待所有的元素都展现才会执行下一步,存在时间上的浪费
隐式等待的优点:节省时间。
- //显示等待
- //隐式等待作用再driver 的整个生命周期
- driver.findElement(By.cssSelector("#kw")).sendKeys("ykz");
- driver.findElement(By.cssSelector("#su")).click();
- WebDriverWait foo = new WebDriverWait(driver,Duration.ofSeconds(3));//WebDriverWait(),传入一个driver,和超时时间
- //until方法,一直查询需要等待的cssid是否存在,存在立即返回,不存在超时退出
- String text = foo.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#\\33 > div > div:nth-child(1) > h3 > a"))).getText();
- System.out.println(text);
优点:节省时间
缺点:写法复杂