【问题标题】:Why driver_execute has a empty value为什么 driver_execute 有一个空值
【发布时间】:2017-10-12 17:02:22
【问题描述】:

我正在尝试将文本发送到文本字段。

binary = FirefoxBinary("C:\Program Files\Mozilla Firefox\Firefox.exe")

driver = webdriver.Firefox(firefox_binary=binary)

text = 'sending something to the text area'

input_field = driver.find_element_by_css_selector('.trumbowyg-editor')

input_field.clear()

driver.execute_script("arguments[0].value = arguments[1];", input_field, 'sending something to the text area')

但它不起作用,什么也没做,也没有任何错误。

另外,我尝试了以下方式:

binary = FirefoxBinary("C:\Program Files\Mozilla Firefox\Firefox.exe")

driver = webdriver.Firefox(firefox_binary=binary)

text = 'sending something to the text area'

input_field = driver.find_element_by_css_selector('.trumbowyg-editor')

input_field.clear()

driver.send_keys(text)

而且它有效。但是,我想用 javascript 代码发送文本,因为它比 driver.send_keys() 命令更快。

【问题讨论】:

    标签: javascript python-3.x selenium firefox selenium-webdriver


    【解决方案1】:

    如果 python 绑定到 selenium 的工作方式类似于 java 绑定,那么脚本执行器期望的是一个字符串,其中包含可以在浏览器控制台中执行以实现所需结果的 javascirpt。

    在这种情况下,将 input_field(可能是一些 python 对象)传递给脚本执行器将无法解决问题。你要传递给它的是:

    driver.execute_script('document.getElementsByClassName("trumbowyg-editor")[0].se‌​tAttribute("value", arguments[0]);','sending something to the text area')
    

    意味着搜索元素也必须在脚本中完成。

    【讨论】:

    • 它对我不起作用。我收到参数 [1] 未定义的错误。
    • 所以,我通过以下方式找到了另一种解决方法: driver.execute_script("arguments[0].innerHTML = arguments[1];", input_field, 'sending things to the text area') 但是这样,出现了奇怪的问题,替换的值没有保存。
    • 好的。我的错(我不是来自 python 世界)。 Ofc 它应该是 arguments[0],因为我已经从函数调用中删除了一个参数。另外,我有一个拼写错误的类名必须没有'。字首。这里的关键是首先在浏览器控制台中尝试该行。只有当它在那里工作时,使用脚本执行器运行它是个好主意。
    • 我明白了...但是问题是它没有再次保存,而且,当我使用driver.execute_script('document.getElementsByClassName("trumbowyg-editor")[0].value=arguments[0];','sending something to the text area')时它没有写入文本字段,当我更改为driver.execute_script('document.getElementsByClassName("trumbowyg-editor")[0].innerHTML=arguments[0];','sending something to the text area')时它被写入了。
    • 这是因为您执行的脚本没有按照您的意愿执行。正如我在答案中所写,如果它在控制台的开发人员工具中工作,那么它应该与脚本执行器一起工作。它应该是:'document.getElementsByClassName("trum‌​bowyg-editor")[0].setAttribute("value", arguments[0]‌);'也编辑了答案。
    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多