2016-03-22 15 views
1

içinde Javascript dosyasını çalıştırın C# içinde webdriver aracılığıyla bir javascript dosyası yürütmeye çalışıyorum. Ancak benC# ile WebDriver

js.ExecuteScript("return ourFunction"); 

O bulunamadı ourFunction bir istisna atar yürütmek zaman jsfile.js ait

IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
(string)js.ExecuteScript("var s = window.document.createElement(\'script\'); s.src = \'E:\\workspace\\test\\jsPopup.js\'; window.document.head.appendChild(s); "); 
js.ExecuteScript("return ourFunction"); 

içerik

document.ourFunction = function(){ tabUrl = window.location.href; 
imagesPath = chrome.extension.getURL("images"); 
var optionsPopupPath = chrome.extension.getURL("options.html"); 
} 

şunlardır: Aşağıdaki i bugüne kadar ne olduğunu. Yapmak istediğim, js enjeksiyonu veya js dosyası tarafından oluşturulan verilere erişmeme izin veren başka bir yöntemle eksiksiz bir javascript dosyası çalıştırmaktır. Herhangi bir yardım ? Üç sorunlar var burada

+0

Selenyum kullanmamıştım, çünkü bu aptalca ise özür dilerim, ama parens eklememizi beklerdim: js.ExecuteScript ("return ourFunction()"); – Crowcoder

+0

Bunun neden olduğunu sanmıyorum istisna. http://stackoverflow.com/questions/17385779/how-do-i-load-a-javascript-file-into-the-dom-using-selenium'u takip ediyorum ve yazar da akıl almıyor(). – Abdul

cevap

1

şunlardır: @Crowcoder işaret ettiği gibi

  1. , aksi takdirde Uncaught ReferenceError: ourFunction is not defined(…)
  2. Sonraki çizgisinde bir hata alırsınız, ourFunction() değil ourFunction ihtiyaç ourFunction eklenir document global kapsam değil, bu yüzden document.ourFunction()'a ihtiyacınız var, aksi takdirde aynı hatayı alırsınız.
  3. Son olarak, işlev hiçbir şey döndürmez, bu nedenle yürütme işlemi undefined döndürür. 'Değerini' geri döndürmeye çalışırsanız, tarayıcıda Uncaught SyntaxError: Illegal return statement(…) gibi bir şey veya kodunuzda muhtemelen null gibi bir şey elde edersiniz.

Tüm bunları, WebDriver'ı tetiklemeye gerek kalmadan tarayıcı konsolunuzdan test edebilirsiniz.

document.ourFunction = function(){ tabUrl = window.location.href; 
    imagesPath = chrome.extension.getURL("images"); 
    var optionsPopupPath = chrome.extension.getURL("options.html"); 
    return optionsPopupPath; // return here! 
} 

Sonra js.ExecuteScript("return document.ourFunction()"); çalışmak gerekiyor: yöntemini değiştirdiyseniz

.

Güncelleme:

(Belki deneyebilirsiniz:. js.ExecuteScript("return document.ourFunction();"); (katma noktalı virgül) ama bu bir fark yaratmak olmamalı) (return deyimi ekleyerek ek olarak)

ben öneririm Bunlar, chrome.extension satırlarını geçici olarak yorumlarken, bunlar hata atıyor ve işlevin oluşturulmasına neden oluyor. Bence bu, büyük olasılıkla başarısızlık kaynağı olan uzak.

Bunu yaptıktan sonra, Firefox ve Chrome'da herhangi bir açık veya örtük beklemeye gerek duymadan benim için iyi çalışır.

+0

Ekleme satırı var yolu = js.ExecuteScript ("return document.ourFunction()"); Aşağıdaki özel durumu atar [kod] 'System.InvalidOperationException' türü işlenmeyen bir özel durum WebDriver.dll içinde oluştu Ek bilgi: bilinmeyen bir hata: document.ourFunction bir işlev değil. Ancak aşağıdaki çizgi çalışır. var yol = js.ExecuteScript ("belgeyi döndür".ourFunction "), ancak yine de Path içinde null üretildi.JsPopup.js işlevini return deyimini içerecek şekilde değiştirdim. – Abdul

+0

Bunu daha ayrıntılı bir şekilde deneyeceğim Daha sonra deneyin. –

+0

Doğru yorum yaptığınızı düşünüyorum. –