- 语法:
- id选择器:#id
- 类选择器:.class
- 标签选择器: 标签名
- 后代选择器:父级选择器,子级选择器
XPath定位
5. 操作测试对象
主要操作:
- click()点击测试对象
- sendkeys()在对象上模拟按键输入
- clear()清除对象输入的文本内容
- submit()提交
- submit()获取元素的文本信息
- getAttribute()获取属性值
- click:点击测试对象
- 在对象上模拟按键输入: sendkeys()
小练习:
搜索到的内容如果都包含"软件测试"则通过,否则不通过.
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 java.util.List; import static java.lang.Thread.sleep; public class Main { public static void main(String[] args) throws InterruptedException { ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=\*"); WebDriver webDriver = new ChromeDriver(options); // 打开百度首页 webDriver.get("https://www.baidu.com"); // 找到百度输入框 // CSS // webDriver.findElement(By.cssSelector('.bg s\_ipt\_wr new-pmd quickdelete-wrap')); // XPath WebElement element = webDriver.findElement(By.xpath("//\*[@id=\"kw\"]")); // 输入软件测试 element.sendKeys("软件测试"); // 找到“百度一下”按钮 // 点击 webDriver.findElement(By.cssSelector("#su")).click(); sleep(3000); // 校验 // 找到搜索结果 List<WebElement> elements = webDriver.findElements(By.cssSelector("a em")); for (int i = 0; i < elements.size(); i++) { System.out.println(elements.get(i).getText()); // 如果返回的结果都有软件测试,则证明测试通过,否则不通过 if (!elements.equals("软件测试")) { System.out.println("测试不通过"); }else { System.out.println("测试不通过"); } } } }
- clear:清除对象输入的文本内容
public static void test3() throws InterruptedException { ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=\*"); WebDriver webDriver = new ChromeDriver(options); webDriver.get("https://www.baidu.com"); // 找到输入框,输入内容 webDriver.findElement(By.cssSelector("#kw")).sendKeys("内容"); // 点击搜索 webDriver.findElement(By.cssSelector("#su")).click(); sleep(3000); //清空输入框 webDriver.findElement(By.cssSelector("#kw")).clear(); }
- submit:提交
- 如果点击的元素放在form标签中,此时使用submit实现的效果和click是一样的,
- 如果点击的元素放在非form标签中,此时使用submit报错。
示例:
public static void test4() { ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=\*"); WebDriver webDriver = new ChromeDriver(options); webDriver.get("https://www.baidu.com"); webDriver.findElement(By.xpath("//\*[@id=\"s-top-left\"]/a[1]")).submit(); }
- text:用于获取元素的文本信息
- getAttribute():获取属性值
示例 :
public static void test5() { ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=\*"); WebDriver webDriver = new ChromeDriver(options); webDriver.get("https://www.baidu.com"); String butten_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value"); // WebElement element = webDriver.findElement(By.cssSelector("#su")); // String butten\_value = element.getAttribute("value"); System.out.println(butten_value); }
6. 添加等待
如果等待3天时间,强制等待会一直等待,等待三天时间。
隐式等待最长等待三天时间,如果在三天时间内某个时间点获取到页面上的元素,此时执行下面代码,如果等待三天时间还是没有找到这个元素,此时报错.
- sleep休眠 :
- 隐式等待
通过添加implicitlyWait() 实现. 隐式等待并非一个固定的等待时间,当脚本执行到某个元素定位是,如果元素开一个定位则继续执行, 如果元素定位不到, 则它以轮询的方式不断的判断元素是否被定位到, 直到超出设置的时长.
7. 打印信息
- 打印title
- 打印url
8. 浏览器的操作
- 浏览器前进
- 浏览器后退
- 浏览器刷新
public static void test7() throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=\*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("319");
webDriver.findElement(By.cssSelector("#su")).click();
// 浏览器后退
webDriver.navigate().back();
sleep(3000);
// 浏览器刷新
webDriver.navigate().refresh();
sleep(3000);
// 浏览器前进
webDriver.navigate().forward();
sleep(3000);
}
- 浏览器滚动条操作
public static void test7() throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=\*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("319");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
// 将webDriver强制转换JavascriptExecutor类型,执行JS代码
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
// 窗口最大化
webDriver.manage().window().maximize();
sleep(3000);
// 全屏展示
webDriver.manage().window().fullscreen();
sleep(3000);
// 设置窗口大小
webDriver.manage().window().setSize(new Dimension(800, 1000));
}
9. 键盘操作
- 通过send_keys()调用按键:
- send_keys(Keys.TAB) # TAB
- send_keys(Keys.ENTER) # 回车
- send_keys(Keys.SPACE) #空格键
- send_keys(Keys.ESCAPE) #回退键(Esc)
- …
- 键盘组合键用法
- send_keys(Keys.CONTROL,‘a’) #全选(Ctrl+A)
- send_keys(Keys.CONTROL,‘c’) #复制(Ctrl+C)
- send_keys(Keys.CONTROL,‘x’) #剪贴(Ctrl+X)
- send_keys(Keys.CONTROL,‘v’) #粘贴(Ctrl+V)
示例:
public static void test8() throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=\*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("123");
sleep(2000);
// CRL + A
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "a");
sleep(2000);
// CRL + X
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "x");
sleep(2000);
// CRL + V
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "v");
}
10. 鼠标操作
- contextclick() 右击
- doubleclick() 双击
- draganddrop() 拖动
- movetoelement() 移动
示例 :
public static void test9() throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=\*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("selenium");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
// 找到图片按钮
WebElement webElement = webDriver.findElement(By.cssSelector("#s\_tab > div > a.s-tab-item.s-tab-item\_1CwH-.s-tab-pic\_p4Uej.s-tab-pic"));
// 鼠标右击
Actions actions = new Actions(webDriver);
sleep(1000);
actions.contextClick(webElement).perform();
sleep(1000);
}
11. 定位一组元素
- 复选框
public static void test10() {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=\*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("xxxxxxxxxxxxxxxxxxxxxxxxxx");
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.DAYS);
List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
for (int i = 0;i < webElements.size(); i++) {
// 如果每个元素type值等于checkbox进行点击
// getAttribute("type") 获取元素的type属性值
if (webElements.get(i).getAttribute("type").equals("checkbox")) {
webElements.clear();
}else {
}
}
}
- 多层框架定位
- 定位到: frame --> inner —> click按钮
- 定位下拉框中的选项
- 按索引定位:
- 按属性值定位
- 定位弹窗
- 上传文件
传入本地文件所在路径
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
mg_convert/46506ae54be168b93cf63939786134ca.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)