如何在控制台中运行javascript,类似于execute_script

时间:2018-01-09 17:00:32

标签: javascript python selenium selenium-webdriver console

我有一个python selenium脚本来更新datefield中的日期。

script = """
var date = 'input[id="date"]';
return date.value = {};
""".format('2018-01-09')

value = self.driver.execute_script(script)

但是如何在浏览器控制台中验证这是否有效。我正在使用Safari。

在控制台中,我可以运行document.getElementById('date').value = '2018-01-09'来更改日期。 但是如何验证execute_script在控制台中的工作原理。 我在cosnsole尝试了这个但是没有工作

$(function($){
    var date = 'input[id="date"]';
    return date.value = '2018-01-09';
});

2 个答案:

答案 0 :(得分:0)

您必须运行python脚本并转储script的输出。然后拿出它并在浏览器中运行它以查看它是否可行...或者您可以只运行脚本,也可以添加一些断点以在运行时查看变量等。

答案 1 :(得分:0)

通常,如果javascript代码段可以在浏览器控制台中运行,那么它也应该在execute_script()中工作。唯一可能导致失败的是我们从程序脚本端传递javascript片段的论据。

让我们以下面的例子来解释,怀疑我们想要改变inputbox的值,我们可以使用下面的execuite_script()来存档:

inputEle = driver.find_element_by_xxxx('css/xpath locator')
newValue = '';
driver.execute_script('arguments[0].value=arguments[1]', inputEle, newValue)

在上面的示例中,有两个参数从程序脚本端传递到javascript片段:
1)inputEle将替换占位符:arguments[0]
2)newValue将替换占位符:arguemnts[1]

只有在找不到元素inputEle时,execute_script()才会失败。确保arguments[0].value=arguments[1]是浏览器中的正确javascript代码段后,没有其他因素会导致execute_script()失败。

我们可以使用以下手动步骤确认execute_script()可以在执行之前存档我们想要的效果:

  1. 在浏览器DevTool Element标签中验证css / xpath定位器 如下图所示,匹配元素HTML代码将以黄色背景突出显示,然后将鼠标悬停在HTML代码上,页面上的相应元素将突出显示,直到现在我们可以确认css / xpath定位器可以找到我们想要的元素或不。 enter image description here

  2. 在浏览器DevTool Console标签中验证javascript片段 a)选择元素的HTML节点,然后切换到Console选项卡 b)键入$ 0并按Enter,它将打印出所选元素的HTML代码
    c)仔细检查输出HTML是否与所选元素相同 d)键入$ 0.value =并按Enter键 e)返回页面检查页面上的任何更改,这是您想要的。
    (在Chrome DevTool中,$ 0表示Element标签中选定的HTML节点)

      enter image description here