Selenium 用于打印sendKeys数据的WebDriver日志记录

Selenium 用于打印sendKeys数据的WebDriver日志记录,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我一直在使用Firefox日志,如下所示- ((FirefoxDriver) webDriver).setLogLevel(Level.INFO); 这会记录所有浏览器操作,例如- INFORMATION: Executed: [057a3eaa-2878-454b-bd52-89f7053e32cc, findElement {using=xpath, value=//input[contains(@id,'_j_username')]}] 但是sendKeys操作使用id和CharSeq

我一直在使用Firefox日志,如下所示-

((FirefoxDriver) webDriver).setLogLevel(Level.INFO);
这会记录所有浏览器操作,例如-

INFORMATION: Executed: [057a3eaa-2878-454b-bd52-89f7053e32cc, findElement {using=xpath, value=//input[contains(@id,'_j_username')]}]
但是sendKeys操作使用id和CharSequence对象记录秘密信息-

INFORMATION: Executing: sendKeysToElement [057a3eaa-2878-454b-bd52-89f7053e32cc, sendKeysToElement {id={17d0dee8-81e5-a741-975d-c7be4612f2ce}, value=[Ljava.lang.CharSequence;@1ce858f9}]
更有用的信息是元素定位器和发送到浏览器的测试数据。如何从浏览器日志中准确获取这些信息


我使用的是selenium 2.53.1

包含执行、已执行、异常等的日志信息是由
RemoteWebDriver
类中的
execute()
方法创建的。执行行在触发命令之前,执行行在收到响应之后。
execute()

因此,在使用
findElement()
的情况下,映射将包含定位器策略(在日志信息中使用),例如id、css等以及要使用的值(日志信息中的值)。如果是
sendKeys()
,则仅将id(WebElement的内部id)和值(要输入的数据)作为参数发送。这就是您在日志信息中看到的全部内容


现在,
RemoteWebElement
将定位器详细信息存储在foundBy String私有变量中,该变量包含定位器策略和值。另外,
RemoteWebElement
toString()方法会打印出这个变量的内容。您需要在发送到
execute()的
RemoteWebElement
类(在本例中为
sendKeys
方法)的参数映射中包含这两个参数中的任何一个
method,如果我的回答正确,您应该获得详细信息。

About<您需要在RemoteWebElement类的参数映射中包含这两个参数中的任何一个。>我想我读错了,因为
sendKeys
方法已经将
字符串参数
输入到字段中。当我使用
RemoteWebElement
中的
toString
方法时,它会得到元素定位器(解决了一个问题),但输入框中要键入的实际内容仍然丢失。要发送的内容在参数映射中以键“value”显示,但它包含一个CharSequence数组,因此toString()方法提供对象地址。您可以在sendKeys()方法中包含此映射中的另一个参数,并使用“value”的字符串表示形式。记录器现在将输出实际值。似乎selenium的当前版本确实在
beforeChangeValueOf
API中有charSequence参数-我刚刚将charSequence转换为字符串并打印了值:)