【测试】web自动化测试-selenium元素定位、弹框及cookie处理
元素定位1 元素定位法1.1 findElement和findElements定位方法为WebDriver中的findElement和findElements方法不同点:findElement返回类型为WebElement对象;findElements返回类型为Web元素列表findElement可用于上述八大类型策略;findElements不行,如果没有找到使用给定定位器策略和...
元素定位
1 元素定位法
1.1 findElement和findElements
定位方法为WebDriver中的findElement和findElements方法
-
不同点:
findElement返回类型为WebElement对象;findElements返回类型为Web元素列表
findElement可用于上述八大类型策略;findElements不行,如果没有找到使用给定定位器策略和定位器值的元素,则返回一个空列表 -
相同点
都是通过接受by对象作为参数
2 八大元素定位类型
- id
- name
- className
- linkText
- partialLinkText
- tagName
- cssSelector
- xpath
2.1 通过id定位
以百度搜索框为例,可以通过id、name、class来定位
//定位百度搜索框
WebElement input=driver.findElement(By.id("kw"));
//定位“百度一下”按钮
WebElement button=driver.findElement(By.id("su"));
3 Alert弹框处理
3.1 只有确认的弹框处理
首先这个页面我们需要点击“试一试”才能出现确认弹框,代码如下(具体操作解释见注释):
//启动浏览器
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_alert");
//这个button在frame中,所以我们要切换进这个frame中才能进行定位
driver.switchTo().frame("iframeResult");
//定位并点击
//定位类型:tagName button为“试一试”按钮的tagName
driver.findElement(By.tagName("button")).click();
//切换进入警告弹框
//accept为弹框确定
driver.switchTo().alert().accept();
3.2 有确认和取消弹框
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_confirm");
driver.switchTo().frame("iframeResult");
driver.findElement(By.tagName("button")).click();
//点击确认按钮
driver.switchTo().alert().accept();
//点击取消按钮
driver.switchTo().alert().dismiss();
3.3 有输入框的弹框
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_prompt");
driver.switchTo().frame("iframeResult");
driver.findElement(By.tagName("button")).click();
//切换进入警告弹框
Alert alert=driver.switchTo().alert();
//向警告弹框中的输入框输入内容
alert.sendKeys("chaoqiwen");
//点击确定按钮
alert.accept();
//点击取消按钮
alert.dismiss();
3.4 有提示语的弹框
打印出提示语的内容
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_alert_2");
driver.switchTo().frame("iframeResult");
driver.findElement(By.tagName("button")).click();
//切换至提示框并获取提示框的内容后打印
System.out.println(driver.switchTo().alert().getText());
4 单选、复选、下拉框的处理
4.1 单选框
sex前规定了选中类型为“redio”(单选)
这里sex中有两个内容,分别是male和female,所以我们在定位时,要使用findElements方法
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_input_radio");
driver.switchTo().frame("iframeResult");
//把要选择内容放在elements列表里
List<WebElement> elements=driver.findElements(By.name("sex"));
//遍历elements列表
for(WebElement w:elements){
//选择没有被选中的内容
if(!w.isSelected()){
w.click();
}else {
//打印选中的内容
System.out.println(w.getText());
}
}
4.2 复选框
vehicle前规定了选择类型为“checkbox”
//多选
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_input_checkbox");
driver.switchTo().frame("iframeResult");
List<WebElement> checkboxes=driver.findElements(By.name("vehicle"));
for(WebElement w:checkboxes){
if(!w.isSelected()){
w.click();
}else {
System.out.println(w.getText());
}
}
//打印复选框的内容
System.out.println(driver.findElement(By.tagName("form")).getText());
//单选
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_input_checkbox");
driver.switchTo().frame("iframeResult");
List<WebElement> checkboxes=driver.findElements(By.name("vehicle"));
checkboxes.get(1).click();
System.out.println(driver.findElement(By.tagName("form")).getText());
4.3 下拉框
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=html_select");
driver.switchTo().frame("iframeResult");
WebElement selectEle=driver.findElement(By.tagName("select"));
//把定位到的对象转换成真正的select对象
Select select=new Select(selectEle);
//根据选择内容选
select.selectByVisibleText("Audi");
Thread.sleep(2000);//等待两秒方便观察
//根据下标选
select.selectByIndex(0);
Thread.sleep(2000);
//根据value选
select.selectByValue("audi");
5 拖拽处理
浏览器页面最大化的方法
//启动浏览器
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
//浏览器的最大化
driver.manage().window().maximize();
driver.get("https://www.jqueryui.org.cn/demo/5621.html");
5.1 拖拽框
拖拽使用actions.dragAndDropBy(WebElement source, int xOffset, int yOffset)方法,source为之前定位好的需要拖住的拖拽框,xOffset为拖拽框变化的横坐标,从左至右为x轴正方形,yOffset为拖拽框变化的纵坐标,从上倒下为y轴的正方向,
perform()为执行操作
//启动浏览器
System.setProperty("webdriver.chrome.driver","/usr/local/bin/chromedriver2");
WebDriver driver=new ChromeDriver();
driver.get("https://www.jqueryui.org.cn/demo/5621.html");
//利用css定位
WebElement item1=driver.findElement(By.cssSelector(".ui-state-default"));
//拖拽使用actions方法
Actions action=new Actions(driver);
action.dragAndDropBy(item1,0,60).perform();
6 cookie处理
6.1 cookie绕过登陆
过程:
1、先手动登陆
2、使用chrome开发者工具获取cookie信息
3. 将获取的cookie信息使用脚本添加
4. 访问登录后页面,登录成功
具体代码实现如下,但因为百度网站有安全校验,所以这种方式是不能进入登陆后的页面,方法学习可供参考
System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver2");
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
Cookie cookie1=new Cookie("BIDUPSID","F0E81AB20F486944796E96E496B14780");
Cookie cookie2=new Cookie("PSTM","1573790991");
Cookie cookie3=new Cookie("BD_UPN","123253");
Cookie cookie4=new Cookie("BAIDUID","05708FF85006AB13F2EBFDC812669314");
Cookie cookie5=new Cookie("FG","1");
Cookie cookie6=new Cookie("COOKIE_SESSION","62_1_8_6_58_49_0_6_7_7_1820_6_91852_1579082211_16_3_1579082234_1579082221_1579082218%7C9%2362_78_1579082218%7C9");
Cookie cookie7=new Cookie("H_PS_PSSID","1435_21105_18560_22157");
Cookie cookie8=new Cookie("BDRCVFR[feWj1Vr5u3D]","I67x6TjHwwYf0");
Cookie cookie9=new Cookie("delPer","0");
Cookie cookie10=new Cookie("BD_CK_SAM","1");
Cookie cookie11=new Cookie("BDORZ","B490B5EBF6F3CD402E515D22BCDA1598");
Cookie cookie12=new Cookie("PSINO","5");
Cookie cookie13=new Cookie("H_PS_645EC","6a0ah1JpGt1K%2FDz2Vcco2L8HCEYPzqCtWCELZlPnQBbzvuWAazplK8kA45vVqN4Oh0eL");
Cookie cookie14=new Cookie("BDUSS","nd-elVuZ3dock8xSXRXdVktREY4bTZNS0h4THpTblMtTnJ4ZzZyOEZMR3dSMHBlSVFBQUFBJCQAAAAAAAAAAAEAAADqsutHQ0hBT1FJV0VOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALC6Il6wuiJeQ");
Cookie cookie15=new Cookie("BD_HOME","1");
Cookie cookie16=new Cookie("sugstore","0");
//添加cookie
driver.manage().addCookie(cookie1);
driver.manage().addCookie(cookie2);
driver.manage().addCookie(cookie3);
driver.manage().addCookie(cookie4);
driver.manage().addCookie(cookie5);
driver.manage().addCookie(cookie6);
driver.manage().addCookie(cookie7);
driver.manage().addCookie(cookie8);
driver.manage().addCookie(cookie9);
driver.manage().addCookie(cookie10);
driver.manage().addCookie(cookie11);
driver.manage().addCookie(cookie12);
driver.manage().addCookie(cookie13);
driver.manage().addCookie(cookie14);
driver.manage().addCookie(cookie15);
driver.manage().addCookie(cookie16);
//进入登陆后的页面
driver.get("http://i.baidu.com");
更多推荐
所有评论(0)