您的位置:首页 > 房产 > 建筑 > 软件测试 - ⾃动化测试常⽤函数

软件测试 - ⾃动化测试常⽤函数

2025/7/27 10:46:39 来源:https://blog.csdn.net/weixin_55807049/article/details/141358509  浏览:    关键词:软件测试 - ⾃动化测试常⽤函数

一、元素定位

        web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。
常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector
常⽤的主要由cssSelector和xpath

1.1 cssSelector

这两种,建议使用cssSelector
选择器的功能:选中⻚⾯中指定的 标签元素
选择器的种类分为基础选择器和复合选择器,常⻅的元素定位⽅式可以通过id选择器和⼦类选择器来 进⾏定位

在网页开发者工具这里,选中代码右键,复制selector

定位百度⾸⻚的“百度热搜”元素,可以使⽤通过id选择器和⼦类选择器进⾏定位:#s-hotsearch > wrapper > div
“搜索输⼊框元素”:#kw
“百度⼀下按钮”:#su
* cssSelector选择器 有多个标签时,想选择第几个标签,就用 小括号(数字)
例如:  li:nth-child(1)
就是选择 第一个 <li></li>标签

使用选择器试一下

分析报错原因:没有找到这个元素

我们刚才手动复制了这个元素的选择器,怎么可能找不到呢?

于是对比,手动打开的百度页面 和 自动化测试打开的百度页面

 问题在于:自动测试打开的百度,没有进行登录。

                手动打开的百度,登录过了。

                于是在复制 选择器 的时候,产生了偏差。

手动打开百度,复制的选择器

#s_xmancard_news_new > div > div.s-news-rank-wrapper.s-news-special-rank-wrapper.c-container-r > div > div > div

自动化测试代开的百度,选择器名是

#s-hotsearch-wrapper > div

把选择器名修改过来就好了

 1.2 xpath

XML路径语⾔,不仅可以在XML⽂件中查找信息,还可以在HTML中选取节点。
xpath使⽤路径表达式来选择xml⽂档中的节点
xpath语法中:

1.2.1 获取HTML⻚⾯所有的节点  //*

1.2.2 获取HTML⻚⾯指定的节点  //[指定节点]

//ul :获取HTML⻚⾯所有的ul节点
//input:获取HTML⻚⾯所有的input节点

1.2.3 获取⼀个节点中的直接⼦节点  /

//span/input

1.2.4 获取⼀个节点的⽗节点  ..

//input/.. 获取input节点的⽗节点

1.2.5 实现节点属性的匹配 //*[@]

//*[@id='kw'] 匹配HTML⻚⾯中id属性为kw的节点

使用xpath定位元素

 1.2.6 使⽤指定索引的⽅式获取对应的节点内容

 * XPATH 有多个标签时,想选择第几个标签,就用 中括号[数字]
例如:  li[1]
就是选择 第一个 <li></li>标签

1.2.7 findElement(By) 和 findElements(By)

1)findElement(By)找某一个元素

2)List<WebElement> findElements(By) 找多个元素

测试遍历这些热搜,打印到终端

先找到热搜的选择器 #hotsearch-content-wrapper > li > a > span.title-content-title

使用自动化测试脚本

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;import java.util.List;public class FirstTest {//创建浏览器驱动WebDriver driver = null;void createDriver() throws InterruptedException {// 以下任何一种都可以,global是全局配置
//        WebDriverManager.globalConfig().setUseMirror(true);
// WebDriverManager.edgedriver().config().setUseMirror(true);
// System.setProperty("wdm.useMirror", "true");WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();//1.打开浏览器(使用驱动打开)
//        //edge 浏览器
//        WebDriverManager.edgedriver().setup();
//        //增加浏览器配置:创建驱动对象时,指定允许访问所有链接。否则请求会被拒绝
//        EdgeOptions options = new EdgeOptions();options.addArguments("--remote-allow-origins=*");
//        driver = new EdgeDriver(options); //创建浏览器驱动对象,带上optionsdriver = new ChromeDriver(options);
//        Thread.sleep(3000);//为了看到效果,增加停留时间//谷歌浏览器--不稳定//改用edge就可以了哈
//        WebDriverManager.firefoxdriver().setup(); //打开浏览器驱动
//        FirefoxOptions options = new FirefoxOptions();
//        options.addArguments("--remote-allow-origins=*");
//        driver = new FirefoxDriver(options); //创建浏览器驱动对象,带上optionsThread.sleep(3000);//为了看到效果,增加停留时间}//测试百度搜索关键词:迪丽热巴void test01() throws InterruptedException {//1.打开浏览器(使用驱动打开)createDriver();//2.输入完整的网址 https://www.baidu.comdriver.get("https://www.baidu.com");Thread.sleep(3000);//3.找到输入框,并输入关键词:迪丽热巴driver.findElement(By.cssSelector("#kw")).sendKeys("迪丽热巴");Thread.sleep(3000);//4.找到百度一下按钮,并点击driver.findElement(By.cssSelector("#su")).click();Thread.sleep(3000);//5.关闭浏览器driver.quit();}//元素定位void test02() throws InterruptedException {//1.打开浏览器驱动createDriver();//2.打开百度地址driver.get("https://www.baidu.com/");//3.定位到百度热搜//选择器 cssSelector//选择单个元素
//        driver.findElement(By.cssSelector("#s_xmancard_news_new > div > div.s-news-rank-wrapper.s-news-special-rank-wrapper.c-container-r > div > div > div"));
//        driver.findElement(By.cssSelector("#s-hotsearch-wrapper > div"));//选择多个元素List<WebElement> ll = driver.findElements(By.cssSelector("#hotsearch-content-wrapper > li > a > span.title-content-title"));for (int i = 0; i < ll.size(); i++) {System.out.println(ll.get(i).getText());}//xpath
//        driver.findElement(By.xpath("//*[@id=\"s-hotsearch-wrapper\"]/div"));Thread.sleep(3000);//4.关闭驱动driver.quit();}
}

发现找到了这些热搜

        至于为什么最后一个不一样,因为热搜是实时更新变动的,上一秒这个在5名,下一秒可能就排到后面或者前面了

二、 操作测试对象

        获取到了⻚⾯的元素之后,接下来就是要对元素进⾏操作了。常⻅的操作有点击、提交、输⼊、清除、获取⽂本。
对元素的操作:都在 WebElement 下(click()、sendKeys()、clear()、getText())
对网页的操作:都在 driver 下(getTitle()、getCurrentUrl())

2.1 点击/提交对象 click()

// 找到百度⼀下按钮并点击 driver .findElement(By. cssSelector ( "#su" )).click()

对于点击操作,没有特别多的限制

例如:我选择在这个空白的地方(蓝色蒙层)进行点击,没有hidden
也能顺利点击

但是如果是hidden的元素,就会报错(元素不可交互)

2.2 模拟按键输⼊ sendKeys("")

  driver .findElement(By. cssSelector ( "#kw" )).sendKeys( " 输⼊⽂字 " );
编写

 

2.3 清除⽂本内容 clear()

输⼊⽂本后⼜想换⼀个新的关键词,这⾥就需要⽤到 clear()
如果不清楚,就会拼接了
driver .findElement(By. cssSelector ( "#kw" )).sendKeys( "流行音乐 " );
driver.findElement(By. cssSelector ( "#kw" )) .clear();
driver .findElement(By. cssSelector ( "#kw" )).sendKeys( "电影推荐 " );

 2.4 获取⽂本信息 getText()

如果判断获取到的元素对应的⽂本是否符合预期呢?获取元素对应的⽂本并打印⼀下~~
获取⽂本信息: getText()
  String bdtext = driver.findElement(By.xpath( "//*[@id=" title- content "]/span[1]" )).getText();
  System.out.println( " 打印的内容是: " +bdtext);
问题:是否可以通过 getText() 获取到“百度⼀下按钮”上的⽂字“百度⼀下”呢?尝试⼀下
获取不到
注意:⽂本和属性值不要混淆了。获取属性值需要使⽤⽅法 getAttribute(" 属性名称 ") ;

 仔细观察,文库之所以能获取文本,是因为,他是标签之间的文字内容,文本内容

而百度一下按钮,这里的 “百度一下”文字,是input标签里的属性

通过 getText()获取内容就没有效果。

获取属性值需要使⽤⽅法 getAttribute("属性名称") ;

 

2.5 获取当前⻚⾯标题  getTitle()

driver 下的方法

2.6获取当前⻚⾯URL getCurrentUrl()

driver 下的方法

三、窗⼝

四、等待

五、导航

六、 弹窗

七、⽂件上传

八、 浏览器参数

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com