Selenium WebDriver功能测试

一、环境搭配

1、maven导入jar包依赖

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.0.0-alpha-7</version>
</dependency>

2、下载浏览器驱动

(1)谷歌

https://npm.taobao.org/mirrors/selenium

按照浏览器版本下载对应的驱动

(2)火狐

两种报错举例:

Cannot find firefox binary in PATH. Make sure firefox is installed.

错误原因:火狐浏览器安装在其他路径,不是默认的安装路径

解决方法:找到火狐安装的路径,复制路径

System.setProperty("webdriver.firefox.bin", "E:\\360Downloads\\install\\Mozilla Firefox\\firefox.exe");

The path to the driver executable must be set by the webdriver.gecko.driver system property;

错误原因:缺少火狐浏览器驱动包。如果selenium版本是3.x的,需要使用驱动包

浏览器驱动下载:

https://npm.taobao.org/mirrors/geckodriver

(3)设置驱动

把下载完的驱动放在java项目的Driver包下

写代码进行设置

谷歌:

火狐:

System.setProperty("webdriver.gecko.driver", "Driver\\geckodriver.exe");

(4)验证驱动是否配置正确 

FirefoxDriver firefoxDriver=new FirefoxDriver();
ChromeDriver chromeDriver=new ChromeDriver();

二、基本元素定位

首先创建驱动

ChromeDriver chromeDriver=new ChromeDriver();

(1)id:根据id获取元素,返回单个元素,id值一般是唯一的

(2)name:根据元素的name属性来获取元素,可能会返回元素集合

(3)tagName:根据元素的标签名来获取元素,可能会返回元素集合

(4)className:根据元素的样式class值来获取元素,可能会返回元素集合

(5)linkText:根据超链接的文本值来获取元素

(6)partialLinkText:根据超链接的部分文本值来获取元素

chromeDriver.get("https://www.baidu.com/");
chromeDriver.findElement(By.id("kw")).sendKeys("Ykbsmn");

三、CssSelector元素定位

(1)css精确定位

根据元素属性,属性名=属性值

By.cssSelector("标签名[属性名='属性值']");

栗子:By.cssSelector("input[name='xxx']");

四、元素操作API

2、

·getTagName():获取元素的的标签名
·getAttribute(属性名):根据属性名获取元素属性值
·getText():获取当前元素的文本值
·isDisplayed():查看元素是否显示

3、WebDriver相关API

首先

ChromeDriver chromeDriver=new ChromeDriver();
chromeDriver.get("https://www.baidu.com/");

(1)get(String url):访问指定url页面
(2)getCurrentUrl():获取当前页面的url地址

System.out.println(chromeDriver.getCurrentUrl());

(3)getTitle():获取当前页面的标题

System.out.println(chromeDriver.getTitle());

(4)getPageSource():获取当前页面源代码

System.out.println(chromeDriver.getPageSource());

(5)quit():关闭驱动对象以及所有相关的窗口

chromeDriver.quit();

(6)close():关闭当前窗口(没有关闭驱动对象)
(7)getWindowHandle():返回当前页面句柄
(8)getWindowHandles():返回所有由驱动对象打开页面所有的句柄,页面不同,句柄不一样
(9)manage():此方法可以获取Options--浏览器菜单操作对象driver.manage().window()

(10)navigate对象的运用

ChromeDriver chromeDriver=new ChromeDriver();
chromeDriver.get("https://www.baidu.com/");
//navigate对象
WebDriver.Navigation navigation=chromeDriver.navigate();
Thread.sleep(1000);
//访问jd
navigation.to("https://www.jd.com");
Thread.sleep(1000);
//刷新页面
navigation.refresh();
Thread.sleep(1000);
//回退
navigation.back();
Thread.sleep(1000);
//前进
navigation.forward();

五、三大等待

1、固定等待

代码执行速度太快,UI元素没有立即显示出来,造成两者不同步,从而元素找不到

Thread.sleep(1000)//1000等于1秒

 2、隐式等待

在设置的超时时间范围内不断查找元素,直到找到元素或者超时

优点:相对灵活

缺点:设置是针对全局额,在WebDriver实例整个生命周期有效,但并不是所有的元素都需要等待。 

//在driver实例化后完成之后设置隐式等待,设置超时的时间为5s
chromeDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

 3、显示等待

用来等待某个条件发生后再继续执行后续代码(如找到元素、元素可点击、元素已显示等)

方法条件
visibilityOfElementLocated(By Locator)页面元素在页面存在并且可见
elementToBeClickable(By Locator)页面元素是否在页面上可用和可被单击
elementToBeSelected(WebElement element)页面元素处于被选中状态
textToBePresentInElement(By locator)在页面元素中是否包含特定的文本
presenceOfElementLocated(By locator)页面元素在页面中存在

 

//显示等待
WebDriverWait webDriverWait=new WebDriverWait(chromeDriver, 5);
webDriverWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xxxx")));

六、特殊元素操作

1、模态框

(1)alert

chromeDriver.findElement(By.id("xxxx"));
Thread.sleep(1000);
//switchTo.alert 找到对应的alert弹框
Alert alert=chromeDriver.switchTo().alert();
alert.accept();              

(2)Confirm

chromeDriver.findElement(By.id("xxxx"));
Thread.sleep(1000);
//switchTo.alert 找到对应的confirm弹框
Alert alert=chromeDriver.switchTo().alert();
alert.accept();     
//alert.dismiss();         

2、iframe(四种切换方式)

//进入第一个内嵌页面中定位元素,输入数据
//切换iframe
chromeDriver.switchTo().frame("bframe");
chromeDriver.findElement(By.id("bb")).sendKeys("222");
//回到默认的页面
chromeDriver.switchTo().defaultContent();

3、window

当你要操作另外一个窗口时,一定要注意先切换窗口。切换方式:传入要操作窗口的name或者句柄handle

通过传入的句柄切换窗口 

chromeDriver.get("a.html");
chromeDriver.findElement(By.id("aa")).sendKeys("这是第一个窗口");
Thread.sleep(1000);
//切换到b窗口
chromeDriver.findElement(By.id("bb")).click();
//虽然切换到b窗口,但是句柄还是在a窗口,所以操作的还是a窗口
Thread.sleep(1000);
//句柄的切换
//进入到b窗口之后,获取所有句柄,然后通过for循环找到b窗口的句柄
Set<String> handles=chromeDriver.getWindowHandles();
for(String handle:handles){
    //切换句柄
    chromeDriver.switchTo().window(handle);
    if(chromeDriver.getTitle().equals("b.html")){
        //如若标题是符合的话,就跳出循环
        break;
    }
}
//对b窗口的元素进行定位
chromeDriver.findElement(By.id("bb")).sendKeys("这是第二个窗口");

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值