一、如何用JavascriptExecutor获取浏览器窗口的大小
1 package basicweb; 2 3 import static org.junit.jupiter.api.Assertions.*; 4 5 import java.util.concurrent.TimeUnit; 6 7 import org.junit.jupiter.api.AfterEach; 8 import org.junit.jupiter.api.BeforeEach; 9 import org.junit.jupiter.api.Test; 10 import org.openqa.selenium.JavascriptExecutor; 11 import org.openqa.selenium.WebDriver; 12 import org.openqa.selenium.chrome.ChromeDriver; 13 14 class WindowSize { 15 16 WebDriver driver; 17 // 声明一个私有的JavascriptExecutor变量 18 private JavascriptExecutor js; 19 20 @BeforeEach 21 void setUp() throws Exception { 22 driver = new ChromeDriver(); 23 // 把driver强制转换成JavascriptExecutor类型 24 js = (JavascriptExecutor)driver; 25 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 26 driver.manage().window().maximize(); 27 } 28 29 @Test 30 void test() throws InterruptedException { 31 // 用Javascript的方式打开百度 32 js.executeScript("window.location = 'https://www.baidu.com';"); 33 // 用Long类型的变量来接收窗口的长和宽 34 // 长 35 Long height = (Long)js.executeScript("return window.innerHeight;"); 36 // 高 37 Long width = (Long)js.executeScript("return window.innerWidth;"); 38 System.out.println("窗口的高度为:"+height); 39 System.out.println("窗口的宽度为:"+width); 40 41 } 42 43 @AfterEach 44 void tearDown() throws Exception { 45 Thread.sleep(2000); 46 driver.quit(); 47 } 48 49 50 }
运行结果为:
二、如何把元素滚动到页面可见位置
1、当我们打开页面时,默认是在页面的最顶部,其余的页面部分是被遮盖的,我们通过滑动鼠标齿轮才能够看到网页剩余的部分。
2、如果页面是被遮盖的,那么这个时候如果需要操作被遮盖的元素,就有可能会失败。(可能会失败)因此这种情况下我们就需要滚动页面元素到可见位置。
1 package basicweb; 2 3 import java.util.concurrent.TimeUnit; 4 5 import org.junit.jupiter.api.AfterEach; 6 import org.junit.jupiter.api.BeforeEach; 7 import org.junit.jupiter.api.Test; 8 import org.openqa.selenium.By; 9 import org.openqa.selenium.JavascriptExecutor; 10 import org.openqa.selenium.WebDriver; 11 import org.openqa.selenium.WebElement; 12 import org.openqa.selenium.chrome.ChromeDriver; 13 14 class ScrollingElementIntoView { 15 16 WebDriver driver; 17 // 声明一个私有的JavascriptExecutor变量 18 private JavascriptExecutor js; 19 20 @BeforeEach 21 void setUp() throws Exception { 22 driver = new ChromeDriver(); 23 // 把driver强制转换成JavascriptExecutor类型 24 js = (JavascriptExecutor)driver; 25 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 26 driver.manage().window().maximize(); 27 } 28 29 @Test 30 void test() throws InterruptedException { 31 js.executeScript("window.location = 'https://p2p.migang.com/';"); 32 Thread.sleep(2000); 33 34 // 1、滚动到页面最底部 35 // 第一个数字代表水平位置,因为水平位置不变,因此设置为0 36 // 第一个数字代表垂直位置,因为需要滚动到页面最底部,所以垂直设置的数值要大于等于窗口垂直的实际数值 37 js.executeScript("window.scrollBy(0, 1900);"); 38 Thread.sleep(2000); 39 40 // 2、滚回先前的位置(还未执行滚动到页面最底部的位置,也就是页面最顶部) 41 js.executeScript("window.scrollBy(0,-1900);"); 42 Thread.sleep(2000); 43 44 // 3、滚动到要操作的元素位置 45 WebElement element = driver.findElement(By.xpath("//h2/span[contains(text(),'媒体报道')]")); 46 // arguments[0]不是数组,是一个arguments对象,arguments[0]返回的是第一个参数的实际值,0会被argument代替,argument就是上面element这个元素 47 // 我们要把这个元素提供给JavascriptExecutor 48 js.executeScript("arguments[0].scrollIntoView(true);",element); 49 Thread.sleep(2000); 50 js.executeScript("window.scrollBy(0,-190);"); 51 Thread.sleep(2000); 52 element.click(); 53 } 54 55 @AfterEach 56 void tearDown() throws Exception { 57 Thread.sleep(2000); 58 driver.quit(); 59 } 60 }
运行结果:
滚动到最底部---》最顶部---》滚动到“媒体报道”模块(但被导航条遮盖)---》滚动显示出“媒体报道”模块
在很多网站中,当我们刚进入一个网站页面,进行滑动时,导航条会固定在顶部显示,因此我们在代码中滚动到“媒体报道”模块后还需要向上滚动一点,这是因为滑动后顶部固定的导航条遮住了我们需要定位的元素。
如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。