0%

Selenium | 借助 JavaScript 实现一些不易处理的操作

JavascriptExecutor

Javascript 脚本执行器。

arguments[i]是 js 脚本传参的占位符,i 从 0 开始。

页面滚动

jse 方式滚动页面的几种方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JavascriptExecutor jse = (JavascriptExecutor)driver;

// 滚动到某元素(tips:适用于元素不可见或被遮挡)
jse.executeScript("arguments[0].scrollIntoView();", element);

// 向下滚动
jse.executeScript("window.scrollBy(0, 500)", "");
jse.executeScript("scroll(0, 500);");

// 滚动到底部
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");

// 动态元素的高度
double ImageHeight = eachtile.getSize().getHeight();
double f = 1.04*ImageHeight;
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,arguments[0]);", -f);

元素内取值

1
2
3
4
5
6
<div class="item-price">100 Yuan</div>

<div class="item-price">
<span>200 Yuan</span>
300 Yuan
</div>

div 可能有 span 也可能没有,但要不取出 span 中的文本,即,期望得到 100 Yuan 和 200 Yuan

1
2
3
4
WebElement element = driver.findElement(By.xpath("//div[contains(@class, 'item-price')]"));

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("return arguments[0].lastChild.textContent;", element);

list 超长,点击其中“不可见”的选项

1
2
3
4
5
6
7
8
9
10
11
public void selectListByJS() {
JavascriptExecutor js = (JavascriptExecutor) driver;
String css;
css = "document.querySelectorAll('.select-menu')[0].querySelector('.select-option:nth-child(24)').click();";
js.executeScript(css);
}


// 修改属性,使可见。
// tip:还没验证过
String strJs = "document.getElementsByClassName('arguments[0]').style.height='auto'; document.getElementsByClassName('arguments[0]').style.visibility='visible';";

点击元素

1
2
3
4
5
6
7
8
9
10
/**
* 通过JavaScript实现点击元素。
* tips:适用于click()失效时
*
* @param element
*/
public void clickByJS(WebElement element) {
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].click()", element);
}

资料

https://www.guru99.com/execute-javascript-selenium-webdriver.html

欢迎关注我的其它发布渠道