selenium 使用教程详解-java版本 (9)

记录:在 Actions 类中也有对应操作键盘的方法,例如:keyUp()、keyDown()等,但是我在实际使用中,并没有生效,不知道为何,从网上资料说是,不能直接对浏览器进行操作,只能对页面的元素进行键盘的模拟操作。

第十章 操作javaScript代码

虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了executeScript()方法来执行JavaScript代码。

用于调整浏览器滚动条位置的JavaScript代码如下:

<!-- window.scrollTo(左边距,上边距); --> window.scrollTo(0,450);

window.scrollTo() 方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。其代码如下:

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.Dimension; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.JavascriptExecutor; public class JSDemo { public static void main(String[] args) throws InterruptedException{ WebDriver driver = new ChromeDriver(); //设置浏览器窗口大小 driver.manage().window().setSize(new Dimension(700, 600)); driver.get("https://www.baidu.com"); //进行百度搜索 driver.findElement(By.id("kw")).sendKeys("webdriver api"); driver.findElement(By.id("su")).click(); Thread.sleep(2000); //将页面滚动条拖到底部 ((JavascriptExecutor)driver).executeScript("window.scrollTo(100,450);"); Thread.sleep(3000); driver.quit(); } }

通过浏览器打开百度进行搜索,并且提前通过 window().setSize() 方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。然后通过 executeScript() 方法执行JavaScripts代码来移动滚动条的位置。

将滚动条滚动到某个区域后停止(页面元素全部加载完成),如下:

//滚动到某一区域 //scrollIntoView(0); 让元素滚动到可视区域的最下方 //scrollIntoView(); 让元素滚动到可视区域的最上方 //JavascriptExecutor javascriptExecutor = (JavascriptExecutor)BrowserUtil.driver; //javascriptExecutor.executeScript("document.getElementById('index_ads').scrollIntoView(0);"); //JavaScript的参数传递-selenium和js的交互 //1、先去找到这个元素 WebElement webElement = driver.findElement(By.xpath("element")); //2、找到的元素作为参数传入到Js代码中 JavascriptExecutor javascriptExecutor = (JavascriptExecutor)driver; javascriptExecutor.executeScript("arguments[0].scrollIntoView(0)",webElement);

页面元素是通过懒加载方式,需要一直进行滚动的

/** * 滑动列表找元素并且进行点击(懒加载) * @param selectedText 选中元素文本 * @param by 正在加载类似元素的定位表达式 */ public static void clickElementInList(String selectedText, By by) { // 滑动之前的页面源代码信息 String beforeSource = ""; // 滑动之后的页面源代码信息 String afterSource = ""; // 循环条件 // 1、找到了元素,跳出循环 // 2、如果没有找到元素???怎么跳出循环 while (true) { WebElement webElement = driver.findElement(by); // 获取页面源代码 beforeSource = driver.getPageSource(); // 获取js执行器 JavascriptExecutor javascriptExecutor = (JavascriptExecutor)driver; // 执行js javascriptExecutor.executeScript("arguments[0].scrollIntoView(0);", webElement); // 如果当前页面有想要的元素,怎么判断是否有??--getPageSource if (driver.getPageSource().contains(selectedText)) { driver.findElement(By.linkText(selectedText)).click(); // 找到元素退出循环,不再滚动。 break; } afterSource = driver.getPageSource(); // 页面元素没有变化---滑动到了最底部 if (afterSource.equals(beforeSource)) { // 到达底部,退出。 break; } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjgxg.html