用webdriver进行自动化,用js修改隐藏控件的值之后,页面上的值并没有显示出来,请问具体要怎么做?

JavaScript076

用webdriver进行自动化,用js修改隐藏控件的值之后,页面上的值并没有显示出来,请问具体要怎么做?,第1张

当你修改那个隐藏字段的值时(你肯定是用JS改的吧?),同时修改那个 i 标记的text不就行了?用jQ写的话:

var val = 1988

$('input[name="dateForm.year"]').val(val)// 这段代码你应该已经写了

$('.sVal').text(val)// 再加上这段,但请注意class为sVal的标记应该只有这一个,否则……

如果你不想用jQ,当然也没问题,但需要稍微多写点兼容代码(该死的IE8!),如果需要请追问。

selenium webdriver的硬伤在于它无法真正判断页面上的元素什么时候能生成完毕,换句话说 ,假如获取页面上的元素失败,而这个元素是由js,ajax生成并且是未知的情况下(例如:要抓取网页关键词,但是关键词的内容是什么,一共有几个都是未知的情况下) 你无法判断是元素尚未被生成还是页面原本就没有这个元素导致的获取失败。

刚才说webdriver无法真正判断页面元素生成完毕,但webdriver提供了判断页面是否加载完成的方法,只不过这个加载完成的含义是页面上的html和JS代码加载完成,但js,ajax还可能在html和JS加载完之后执行从而改变页面上的内容,所以像刚才举例的网页上的关键词抓取失败就很难判断是js,ajax没有运行完毕还是页面上原本就没有这个元素导致的。

虽然selenium webdriver没有提供判断页面上的js,ajax是否执行完毕的功能,但不等于完全没有办法判断。官方也承认并不是不可以而是非常困难。昨天群里一位高手也说这种情况需要自行查看页面上的动态脚本代码以得知判断页面执行完的条件。我相信一个第三方库是比较难做到这一点的,即使牛逼到能实现,也不排除页面上有一个持续或者定时与服务器通信的动态脚本在实时改变页面内容,这样一来页面永远没有生成完毕的那一刻。

对于刚才说的抓取页面上未知元素,目前普遍的做法是在程序里面显示指定等待一段时间,确保有足够的时间让它生成,当然,不排除网络太差直到等待超时也来不及生成的情况。如果元素已知,可以显示用selenium webdriver提供的方法显示等待某一个元素在页面上出现后再继续执行下面的代码。