当前位置:   article > 正文

Webdriver中寻找元素超时(pageLoadTimeout 、mplicitlyWait和WebDriverWait适用情况)和在指定元素上执行js方法

pageloadtimeout

1.pageLoadTimeout 设置页面加载超时时间:

//设定在加载页面时间为15秒,如果在加载时间还不能加载完页面那会抛出超时异常我们可以观察我们需要的元素加载的时间,之后就可以找到并处理了

driver.manage().timeouts().pageLoadTimeout(15,TimeUnit.SECONDS);

在15秒之后如果页面还没有加载完成则抛出超时异常;这时我们应该对上面进行异常捕获。

2. implicitlyWait 设置寻找一个元素的时间

driver.manage().timeouts().implicitlyWait(7, TimeUnit.SECONDS);

//寻找一个7秒内一个元素,如果7秒内没有找到,则抛出NoSuchElement异常

3. new WebDriverWait(driver,3,1000);

//每1秒检查一次,最多等待3s (默认0.5s) 找不到元素会抛出NoSuchElement异常,如果找到了那就马上返回。

问题:1,2都可以设置等待元素的超时时间,那具体是按照哪个的时间作为超时时间呢?

a. 当implicitlyWait 的和WebDriverWait同时设置了超时时:

我们试着找应该没有的元素:

  1. // webDriverWait = new WebDriverWait(driver,20,1000);
  2. // driver.manage().timeouts().implicitlyWait(7, TimeUnit.SECONDS);
  3. WebElement wInfoNo = null;
  4. nowTime = System.currentTimeMillis();
  5. try {
  6. //driver.manage().timeouts().implicitlyWait会使用设置的时间进行超时
  7. wInfoNo = driver.findElement(By.className("ln11"));
  8. // wInfoNo = webDriverWait.until(new ExpectedCondition<WebElement>() {
  9. // @Override
  10. // public WebElement apply(WebDriver input) {
  11. // return driver.findElement(By.className("ln11"));
  12. // }
  13. // });
  14. } catch (Exception e) {
  15. System.out.println("找不到");
  16. lastTime = System.currentTimeMillis();
  17. }
  18. if(lastTime==0){
  19. System.out.println("找到了");
  20. System.out.println(""+(System.currentTimeMillis()-nowTime));
  21. }else{
  22. System.out.println(""+(lastTime-nowTime));
  23. }
结果: 我们没有设置implicitlyWait,则driver.findElement()只会找一遍指定元素,找不到就马上抛异常


b.当我们设置implicitlyWait时:(打开设置implicitlyWait的代码) 结果:


c.加上设置WebDriverWait webDriverWait = new WebDriverWait(driver,20,1000);


总结:我们可以发现driver.findElement()使用的是implicitlyWait的超时时间

d.使用WebDriverWait对象寻找元素会怎么样呢?

  1. WebDriverWait webDriverWait = new WebDriverWait(driver,3,1000);
  2. driver.manage().timeouts().implicitlyWait(7, TimeUnit.SECONDS);
  3. WebElement wInfoNo = null;
  4. nowTime = System.currentTimeMillis();
  5. try {
  6. // wInfoNo = driver.findElement(By.className("ln11"));//会使用driver.manage().timeouts().implicitlyWait设置的时间进行超时
  7. wInfoNo = webDriverWait.until(new ExpectedCondition<WebElement>() {
  8. @Override
  9. public WebElement apply(WebDriver input) {
  10. return driver.findElement(By.className("ln11"));
  11. }
  12. });
  13. } catch (Exception e) {
  14. System.out.println("找不到");
  15. lastTime = System.currentTimeMillis();
  16. }
  17. if(lastTime==0){
  18. System.out.println("找到了");
  19. System.out.println(""+(System.currentTimeMillis()-nowTime));
  20. }else{
  21. System.out.println(""+(lastTime-nowTime));
  22. }

结果好像webDriverWait 是使用的implicitlyWait的超时时间,但是我们把WebDriverWait 的超时时间的值设置比implicitlyWait大时会怎么样呢?

WebDriverWait webDriverWait = new WebDriverWait(driver,20,1000);


观察可以简单判断:

如果设置了1、webDriverWait的等待时间和2、implicitlyWait 的等待时间 如果1<=2则使用的是2的时间 如果1>2则使用1的时间但是要比1的时间长一些,具体长多少时间和webDriverWait、implicitlyWait设置的超时时间有关。


在java操作页面中的js:

  1. JavascriptExecutorjse = (JavascriptExecutor)driver;
  2. // arguments[0]一般指我们要操作的元素对象, arguments[1]指更新的值
  3. StringsetStartDateJS = "arguments[0].setAttribute('realvalue', arguments[1]);";
  4. //设置id为startDate的元素的realvalue的值为startDate
  5. jse.executeScript(setStartDateJS,driver.findElement(By.id("startDate")),startDate);
  6. String endtDate= getDate(queryModel,false);
  7. //设置id为endDate的元素的realvalue的值为endDate
  8. jse.executeScript(setStartDateJS,driver.findElement(By.id("endDate")),endtDate);







声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/898934
推荐阅读
相关标签
  

闽ICP备14008679号