自动化测试中,等待时间的运用占据了举足轻重的地位,平常我们需要处理很多和时间息息相关的场景,例如:
- 打开新页面,只要特定元素出现而不用等待页面全部加载完成就对其进行操作
- 设置等待某元素出现的时间,超时则抛出异常
- 设置页面加载的时间
- …..
webdriver类中有三个和时间相关的方法:
1.pageLoadTimeout
2.setScriptTimeout
3.implicitlyWait
我们就从这里开始,慢慢揭开他神秘的面纱。
pageLoadTimeout
pageLoadTimeout方法用来设置页面完全加载的超时时间,完全加载即页面全部渲染,异步同步脚本都执行完成。前面的文章都是使用get 方法登录安居客网站,大家应该能感觉到每次打开网页后要等很长一段时间才会进行下一步的操作,那是因为没有设置超时时间而get方法默认是等待页面全部加 载完成才会进入下一步骤,加入将超时时间设置为3S就会中断操作抛出异常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
importjava.util.concurrent.TimeUnit;
importorg.openqa.selenium.By;
importorg.openqa.selenium.WebDriver;
importorg.openqa.selenium.chrome.ChromeDriver;
importorg.openqa.selenium.WebElement;
publicclassNewTest{
publicstaticvoidmain(String[]args)throwsInterruptedException{
System.setProperty("webdriver.chrome.driver",
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=newChromeDriver();
try{
//设置超时时间为3S
driver.manage().timeouts().pageLoadTimeout(3,TimeUnit.SECONDS);
driver.get("http://shanghai.anjuke.com");
WebElement input=driver.findElement(By.xpath("//input[@id='glb_search0']"));
input.sendKeys("selenium");
}catch(Exceptione){
e.printStackTrace();
}finally{
Thread.sleep(3000);
driver.quit();
}
}
|
ps:如果时间参数为负数,效果没有使用这个方法是一样的,接口注释中有相关说明:”If the timeout is negative, page loads can be indefinite”.
如果想在抛出异常后并不中断而是继续执行下面的操作那该怎么办呢?可以使用try,catch的组合来实现这个功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
importjava.util.concurrent.TimeUnit;
importorg.openqa.selenium.By;
importorg.openqa.selenium.WebDriver;
importorg.openqa.selenium.chrome.ChromeDriver;
importorg.openqa.selenium.WebElement;
publicclassNewTest{
publicstaticvoidmain(String[]args)throwsInterruptedException{
System.setProperty("webdriver.chrome.driver",
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=newChromeDriver();
try{
//设置超时时间为3S
driver.manage().timeouts().pageLoadTimeout(3,TimeUnit.SECONDS);
driver.get("http://shanghai.anjuke.com");
}catch(Exceptione){
}finally{
WebElement input=driver.findElement(By.xpath("//input[@id='glb_search0']"));
if(input.isDisplayed())
input.sendKeys("selenium");
}
}
|
这样,当页面加载3S后就会执行下面的操作了。
setScriptTimeout
设置异步脚本的超时时间,用法同pageLoadTimeout一样就不再写了,异步脚本也就是有async属性的JS脚本,可以在页面解析的同时执行。
implicitlyWait
识别对象的超时时间,如果在设置的时间类没有找到就抛出一个NoSuchElement异常,用法参数也是和pageLoadTimeout一样,大家可以自己试验试验。
上文中介绍了如何才能在使用pageLoadTimeout抛出异常的同时继续执行,但是现有的方法还是不完美,如果输入框在3S后没有出现还是会 报错,怎么办呢?机智的同学可以想到用sleep方法来实现,为了方便演示换个更明显的需求来说明。安居客的首页上有个切换城市的链接,当点击城市的时候 就会显示全部的城市以供选择这时display属性就会变化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
importjava.util.concurrent.TimeUnit;
importorg.openqa.selenium.By;
importorg.openqa.selenium.WebDriver;
importorg.openqa.selenium.chrome.ChromeDriver;
importorg.openqa.selenium.WebElement;
importorg.openqa.selenium.interactions.Actions;
publicclassNewTest{
publicstaticvoidmain(String[]args)throwsInterruptedException{
System.setProperty("webdriver.chrome.driver",
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=newChromeDriver();
try{
//设置超时时间为3S
driver.manage().timeouts().pageLoadTimeout(3,TimeUnit.SECONDS);
driver.get("http://shanghai.anjuke.com");
}catch(Exceptione){
}finally{
WebElement city=driver.findElement(By.xpath("//a[@id='switch_apf_id_8']"));
WebElement citys=driver.findElement(By.xpath("//div[@id='city-panel']"));
Actions actions=newActions(driver);
actions.clickAndHold(city).perform();
while(citys.isDisplayed()){
System.out.println("sleep");
Thread.sleep(3000);
}
Thread.sleep(3000);
driver.quit();
}
}
|
执行后会每过3S就会输出一次sleep,但是这样的代码显然不够高大上,而且没有限制会一直无限的等待下去,下面介绍一种高大上的方法,就是until,先看代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
importorg.openqa.selenium.By;
importorg.openqa.selenium.WebDriver;
importorg.openqa.selenium.chrome.ChromeDriver;
importorg.openqa.selenium.WebElement;
importorg.openqa.selenium.interactions.Actions;
importorg.openqa.selenium.support.ui.WebDriverWait;
importorg.openqa.selenium.support.ui.ExpectedCondition;
publicclassNewTest{
publicstaticvoidmain(String[]args)throwsInterruptedException{
System.setProperty("webdriver.chrome.driver",
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
WebDriver driver=newChromeDriver();
try{
//设置超时时间为3S
driver.manage().timeouts().pageLoadTimeout(3,TimeUnit.SECONDS);
driver.get("http://shanghai.anjuke.com");
}catch(Exceptione){
}finally{
WebElement city=driver.findElement(By.xpath("//a[@id='switch_apf_id_8']"));
Actions actions=newActions(driver);
actions.clickAndHold(city).perform();
//最多等待10S,每2S检查一次
WebDriverWait wait=newWebDriverWait(driver,10,2000);
wait.until(newExpectedCondition<Boolean>(){
publicBooleanapply(WebDriver driver){
System.out.println("sleep");
return!driver.findElement(By.xpath("//div[@id='city-panel']")).isDisplayed();
}
});
Thread.sleep(3000);
driver.quit();
}
|
转载:http://www.360doc.com/content/14/0913/10/13497042_409106015.shtml
相关推荐
在测试过程中,WebDriver 会捕获并处理可能出现的错误和异常,例如找不到元素、超时等,这有助于调试和优化测试脚本。 7. **并发测试**: WebDriver 支持多线程或多进程运行测试用例,可以同时在多个浏览器或多个...
Selenium WebDriver是一款强大的自动化测试工具,它允许程序员编写脚本来模拟用户与网页的交互,进行功能性和兼容性测试。在Web应用开发过程中,确保软件在各种浏览器和操作系统上的正确运行至关重要,而Selenium ...
为了处理动态加载的内容,Selenium提供了`WebDriverWait`和`ExpectedConditions`,它们允许我们设置条件,直到满足条件或超时为止。例如,等待某个元素可见: ```python from selenium.webdriver.common.by import ...
- `manage().timeouts()`: 设置超时时间,如页面加载超时、隐式等待等 ### 6. JavaScript执行 - `executeScript(String script, Object... args)`: 执行JavaScript代码,可传递参数 - `executeAsyncScript(String ...
此外,复杂的用户操作模拟、文件上传、文件下载、超时设置也是自动化测试中不可或缺的一部分,本书通过各编程语言篇幅详细介绍了这些知识点。 “Wait”是自动化测试中的一个重要概念,指的是如何让测试脚本在执行...
通过设置超时时间、合理使用并行处理、优化请求间隔等方式,可以提升爬虫的性能和效率。 综上所述,基于Selenium WebDriver 的网络爬虫是一种强大的工具,尤其适用于处理复杂交互和动态内容的网站。熟练掌握其使用...
4. 在自动化测试过程中,合理设置超时时间,避免因网络延迟或服务器响应慢导致的错误。 综上所述,Selenium结合GeckoDriver是进行Firefox自动化测试的重要手段,理解其工作原理和使用方法对于提升测试效率和质量...
在Selenium操作中,可能会遇到找不到元素、页面加载超时等问题,这时我们可以捕获并处理这些异常,确保测试流程的连续性。例如: ```java try { WebElement element = driver.findElement(By.id("myElement")); ...
6. **等待技术**:由于网页加载时间的不确定性,Selenium提供了`WebDriverWait`类,允许我们设置超时时间和间隔,确保元素在执行操作前已经加载完成。例如,可以使用`until()`方法等待特定条件满足。 7. **异常处理...
【Selenium WebDriver与Crystal语言的整合】 Selenium WebDriver是一个强大的自动化测试工具,它允许程序员模拟用户行为,对Web应用程序进行自动化测试。这个工具支持多种编程语言,包括Java、Python、C#、Ruby等,...
- 通过这些文件,你可以实际操作并学习如何设置和执行Selenium测试。 总结来说,Selenium WebDriver与Java的结合提供了一种高效、灵活的Web自动化测试解决方案。通过了解和实践这个示例项目"SeleniumGinoTesting...
【标题】"Python Selenium2 WebDriver 自动化实践" 在IT领域,自动化测试是提升软件开发效率和质量的重要手段,尤其在Web应用开发中。Python作为一门简洁易读且功能强大的编程语言,常被用于编写自动化测试脚本。...
【标题】"hotMailDemo:登录到hotmail并使用Selenium Webdriver for Chrome发送电子邮件"是一个示例项目,展示了如何利用Selenium WebDriver与Chrome浏览器结合,自动化执行登录hotmail和发送邮件的任务。...
这个驱动是用于自动化测试工具,特别是Selenium WebDriver来控制Google Chrome浏览器进行网页自动化操作。 【描述】描述中的"chromedriver-win64_126.0.6474.0.zip"同样强调了这是一个针对Windows 64位系统的Chrome...
WebDriver是Selenium库中的一个关键模块,用于网页自动化测试,特别是在Web应用的用户界面交互方面。这个名为"WebDriver_selenium练习.rar"的压缩包显然包含了若干HTML文件,目的是帮助学习者通过实际操作来掌握...
通过研究这个项目,你可以更好地理解如何在Java环境中设置Selenium WebDriver和JUnit,以及如何编写高效的Web测试用例。 总之,Selenium WebDriver与JUnit的结合为Web测试自动化提供了强大的工具,使我们能够在Java...
- **断言与等待**:检查元素是否可见、是否存在,设置超时等待特定条件。 - **执行JavaScript**:在浏览器上下文中运行自定义JavaScript代码。 **4. 并发处理** Go语言以其强大的并发能力著称,Go-selenium库充分...
**Selenium ChromeDriver** 是一个用于自动化Web浏览器的工具,主要在Selenium WebDriver框架下运行。Selenium WebDriver是一个跨平台的API,允许程序员通过编写语言特定的代码来控制浏览器的行为,进行网页应用的...
使用Selenium WebDriver,你可以定位到文件输入框,设置文件路径,模拟用户选择文件并提交的过程。这通常涉及到`sendKeys()`方法和模拟点击事件。 2. **下载功能测试**:测试下载功能时,主要验证文件是否能正确...