某些特殊情况下,使用selenium的api无法操作页面元素,可以通过js来完成
一.Js定位
js操作中的webelement通过console控制台来进行js定位:
WebElement webelement=document.getElementById(id);
二.元素无法输入
时间控件输入方法:
可点击时间控件下拉框选择(比较麻烦);
有些软件的时间控件标签为input,可直接输入,如果时间控件标签不是input;
不可点击直接输入,可通过js来改变元素的源代码属性
设置/去除元素属性:setAttribute/removeAttribute
案例:12306的时间选择框
JavascriptExecutor javascriptExecutor=(JavascriptExecutor)webDriver; //移除源代码内导致不可输入的属性 javascriptExecutor.executeScript("document.getElementById('train_date').removeAttribute('readonly')"); webDriver.findElement(By.id("train_date")).clear(); //清除原有元素 //清除了只读的属性后,元素就可以输入了 webDriver.findElement(By.id("train_date")).sendKeys("2021-5-14");
三.元素无法通过click点击
元素可被定位到,但是无法通过click点击,是由于点击事件被父元素消耗掉
WebElement webElement=webDriver.findElement(By.xpath("//span[text()='登录']")); WebElement WebElement1=x; JavascriptExecutor javascriptExecutor=(JavascriptExecutor) webDriver; //js传参:把要点击的元素进行传参 javascriptExecutor.executeScript("arguments[1].click()",webElement1,webElement);
四.滚动条操作
滚动条案例:
JavascriptExecutor javascriptExecutor(JavascriptExecutor)webDriver; //滚动到底部 javascriptExecutor.executeScript("window.scrollTo(0,document.body.scrollHeight);"); //js滚动滚动指定距离 javascriptExecutor.executeScript("window.scrollTo(0,800);"); //滚动到指定位置 javascriptExecutor.executeScript("webelement.scrollIntoViewIfNeeded(true);");