如何在Java+Selenium中获得JavaScript动态更改的文本?
我有一个id=time的元素。此元素的值是hh:ss格式的时间,通过使用名为timer:ss的JavaScript脚本动态更改 网站的一些代码:如何在Java+Selenium中获得JavaScript动态更改的文本?,java,javascript,selenium,selenium-webdriver,Java,Javascript,Selenium,Selenium Webdriver,我有一个id=time的元素。此元素的值是hh:ss格式的时间,通过使用名为timer:ss的JavaScript脚本动态更改 网站的一些代码: <html> <head> <script type="text/javascript"> var time = {"m":59,"s":59}; function timer() { if (time['s']
<html>
<head>
<script type="text/javascript">
var time = {"m":59,"s":59};
function timer() {
if (time['s'] < 0) {
time['s'] = 59;
time['m']--;
}
if (time['m'] == 0 && time['s'] == 0) {
//do something
} else {
if (time['s'].toString().length == 2) {
return time['m'] + ':' + time['s']--;
} else {
return time['m'] + ':0' + time['s']--;
}
}
}
time = document.getElementById('time')
setInterval('time.innerHTML=timer()', 1e3)
</script>
<head>
<body>
(...)
<span id="time"></span>
(...)
</body>
</html>
或
但它不起作用——在这两种情况下,时间都是一个空字符串
然后我尝试在Selenium中使用JavaScript:
JavascriptExecutor js = (JavascriptExecutor) driver;
String time = (String) js.executeScript("return document.getElementById('time').innerHTML;");
但时间也是一个空字符串
在FireBug控制台中执行的脚本返回正确的值,例如:
>>> document.getElementById("time").innerHTML;
"58:20"
所以。。。如何获取Selenium中的当前值?由于setInterval将在X秒后执行该函数,因此您的脚本也需要等待相同的时间。这可能是您的问题,测试要求在函数更新innerHTML之前使用它。@Arran,谢谢您的评论!这对我帮助很大。加载页面后,我使用sleep只等了一秒钟,现在所有获取值的方法都正常工作。
JavascriptExecutor js = (JavascriptExecutor) driver;
String time = (String) js.executeScript("return document.getElementById('time').innerHTML;");
>>> document.getElementById("time").innerHTML;
"58:20"