2013-12-11 64 views
-2

我想要在jquery中獲取元素,但我得到了返回對象的null值。如下圖所示IJavaScriptExecutor返回null

代碼:

public IWebElement Executescript(IWebDriver driver, String script) 
{ 
    return (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript(script); 
} 

public IWebElement getuserpasserror() 
{ 
    IWebElement error = op.Executescript(this.driver, "$('li').html()"); 
    return error; 
} 

但返回的值errornull

+0

什麼是'IWebElement'和'IJavaScriptExecutor'。 –

+0

fyi jquery不會用'.html()返回一個元素' –

+0

IwebElement它是selenium webdriver元素。 – Amir

回答

0

您有多個問題。

  1. 你似乎是你需要使用jQuery的誤解。這是不正確的,當我在jQuery或JavaScript中查找Selenium中的元素時,絕對需要使用jQuery(很少有人可以單手使用我的手指)。

  2. 您當前的方法是將ExecuteScript的結果轉換爲IWebElement。這是不正確,因爲你是返回一個string.html()回報string

  3. 你似乎是使用jQuery的很少使用,無論如何,.html()只調用.innerHTML有幾件事情,以滿足舊的瀏覽器。 無論如何,你可以在Selenium中做到這一點!

此方法使用瀏覽器的innerHTML屬性。某些瀏覽器可能不會返回原始文檔中完全複製HTML源代碼的HTML。例如,如果Internet Explorer僅包含字母數字字符,則有時會忽略屬性值的引號。

  1. 硒的JavaScript執行程序將需要一點點推戳給它一個提示要傳遞給它的JavaScript是要回報東西。

  2. 由於您必須使用jQuery,因此您的解決方案將在沒有加載jQuery的頁面上打破。

所以,我會做如下:

  1. 因爲你的方法是什麼都不做有用(您限制自己IWebElement的通過你的JS返回),然後我想簡單地直接調用它:

    string error = ((IJavaScriptExecutor)driver).ExecuteScript("return $('li').html()").ToString();

  2. 既然你不絕對需要 jQuery找到你的元素,你爲什麼不用Selenium找到它們第一個?你似乎在給你的API。有各種方法來查找元素。

    driver.FindElements(By.TagName("li"));

  3. 要完全去除這裏的jQuery的依賴,複製大多什麼html()屬性不,只需撥打GetAttribute和尋找innerHTML

    element.GetAttribute("innerHTML");

  4. 而且,爲什麼需要這個innerHTML/.html()根本就是.Text爲什麼不能恢復您的期望?

  5. 最後,乾脆把這個,使用LINQ:

    IEnumerable<string> html = driver.FindElements(By.TagName("li")).Select(i => i.GetAttribute("innerHTML"));

這是您正在嘗試使用jQuery做什麼的精確複製,但沒有jQuery的。

0

在Selenium中,您不需要使用jQuery來查找元素。您可以使用內置的Selenium函數。

var text = driver.FindElement(By.TagName("li")).Text; 

如果你必須你jQuery的問題可能是你沒有返回任何你的腳本。它應該是這樣的:

var error = op.Executescript(this.driver, "return $('li').html();"); 
+0

謝謝我知道,但有一些地方,我需要使用jQuery(而不是xpath)'所以我想學習如何做到這一點 – Amir

+0

在這種情況下,您的腳本不會返回任何內容,因爲您沒有返回。你可以試試這個:op.Executescript(this.driver,「return $('li')。html();」); – Jason

+0

這不是完全正確的答案,但問題分爲兩部分:1)您必須告訴Selenium的JavaScript執行程序從您要提交的JS中「返回」某件事,否則它不會給您任何東西和2)jQuery不會導致'IWebElement',它會返回一個'string'。 FWIW,'html()'jQuery方法除了調用'.innerHTML'(你不需要執行JS就可以完成)以及一些事情來迎合舊版瀏覽器。通過在這裏使用jQuery,你獲得**完全沒有任何**。 – Arran