2015-12-31 74 views
0

我學習CasperJS,並已能夠登錄到使用fill()一個網站,但一直無法使用this.evaluate()this.sendKeys()CasperJS - 使用填()與評價()VS的SendKeys()

上午什麼我做錯了this.evaluate() & this.sendKeys()

這工作:

casper.then(function() {  
    this.fill('form[class="login-form"]', { 
     'session_key': 'username', 
     'session_password': 'password' 
    }, true); 
}); 

然而,這些都不做:

casper.then(function() { 
    this.evaluate(function(username, password) { 
     document.querySelector('input#login-email').value = username; 
     document.querySelector('input#login-password').value = password; 
     document.querySelector('input[value="Sign in"]').click(); 
    }, 'username', 'password'); 
}) 

casper.then(function() { 
    this.sendKeys('input#login-email', 'username'); 
    this.sendKeys('input#login-password', 'password'); 
    this.click('input[value="Sign in"]') 
}) 
+0

我沒有看到頁面標記,讓那些選擇是完全錯誤有可能。另一種可能是點擊不起作用。 'element.click()'幾乎永遠不會工作,'casper.click(sel)'幾乎總能正常工作,但有時候它不起作用。有一個原因,爲什麼有多種方式來做*看似*相同的事情。 –

回答

2

因爲你的問題是不是具體的更一般的,我會盡量回答以同樣的態度。

填充和填充選擇器可以快速填充簡單表單。

如果你有JavaScript重型網站,在事件被觸發的動作,那麼你有SendKeys,它會嘗試觸發這些事件,因爲他們去。

最後,如果SendKeys不執行任務,您可以隨時執行評估並手動觸發這些事件。如果您打開瀏覽器控制檯並檢查要對其執行操作的元素,則會看到附加的事件。從那裏,你可以看到它們是否是DOM事件或JQuery事件,所以你可以相應地使用document.querySelector或$。在編寫任何代碼之前,要知道如果你跳轉到瀏覽器的JavaScript控制檯,那麼你執行的任何代碼將會是你在評估範圍中最終得到的;在將其應用到腳本之前,您可以在瀏覽器中快速測試您的代碼。我只是通過我的個人經驗去了「fill()vs evaluate()vs sendKeys()」的表面,但是要專門回答你的問題,我們沒有頁面HTML,所以很難說。爲什麼SendKeys不能工作而沒有評估會有很多原因。在您的評估範圍中,選擇器可能錯誤或缺少事件。

最後,Artjom提到的,點擊它總是最好用casper.click(選擇)去