iframe
页面内嵌窗口(html内嵌套html。多窗口就是有多个html文件,所以iframe也要窗口切换)
常用的iframe切换
方法1:根据索引切换iframe
1、网页上查找iframe所在位置,这个方法比较可靠,有些iframe层级关系不明显,容易出现找不到元素
2、index是iframe的索引值,根据所在位置减1得出索引值
// index是iframe的索引值
driver.switchTo().frame(index);
方法2:根据name属性切换iframe
// 根据上图看出iframe的name属性
driver.switchTo().frame("iframe3");
方法3:根据xpath路径切换iframe
// 根据iframe的xpath路径
driver.switchTo().frame(driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/iframe[2]")));
退出iframe
driver.switchTo().defaultContent();
动态iframe切换
1、先获取父级的元素的xpath
WebElement div = driver.findElement(By.xpath("/html/body/div[4]/div[2]"));
2、通过获取到的父级元素,再通过 .FindElement(By.cssSelector()) 来定位
WebElement iframe = div.FindElement(By.cssSelector("iframe")) ;
3、然后再进入iframe
driver.switchTo().frame(iframe);
获取图片验证码
1、通过 XPath 定位方式找到页面中的图片验证码元素,
WebElement span = driver.findElement(By.xpath("图片验证码的xpath"));
2、获取图片验证码元素的 textContent
属性值
String text = span.getAttribute("textContent");
3、通过 XPath 定位方式找到需要填写验证码的输入框元素,填入验证码
driver.findElement(By.xpath("填入验证码的xpath路径")).sendKeys(text);
selenium动态元素定位
1、XPath 定位方式找到需要操作动态元素的父级元素
WebElement tr = driver.findElement(By.xpath("动态元素的父级元素xpath"));
2、通过 CSS 选择器定位方式找到该行中的第一个输入框元素(input),再对动态元素进行操作
tr.findElement(By.cssSelector("input")).click();