2013-11-27 50 views
3

我用下面的代碼某些鍵發送到瀏覽器窗口:硒爪哇 - 新的操作(駕駛))的SendKeys(...)行爲

(new Actions(driver)).sendKeys(StringToBeEntered).perform(); 

我的問題是它使一個。如果傳遞給它的字符串是一個預定義的字符串變量而不是實際的字符串常量,那麼與sendKeys的功能有什麼不同?

sendKeys(strVariable).perform()sendKeys("String").perform會有相同的行爲?

我使用這種方法,因爲文本需要發送的元素是不可選擇的。

回答

5

不,它沒有區別。

String strVariable = "String" 
sendKeys(strVariable).perform(); 

而且......

sendKeys("String").perform(); 

...在硒相同。

原因與Selenium無關,但Java的工作方式。解釋起來有點複雜,但是在Java中,方法中的變量按值通過,而不是通過引用。因此,在第一個版本中,變量的值(即字符串)被傳遞到方法中,而不是變量引用本身。這意味着,就sendKeys()方法而言,第一個和第二個版本是相同的。

指出Java中的字符串是不可變的也很重要,所以sendKeys方法和方法外的任何東西都不能改變字符串本身的值。

+0

最終結果是正確的,但字符串在技術上是對象,而不是原始的,所以對字符串的引用是通過值傳遞的。但是,我認爲這對於一個簡單而沉悶的問題來說是一個很好的答案。 +1 –