2017-03-17 27 views
0

在我PageObject甲級IWebElement的肺癌如下:異常使用與PageObject IWebElement Action類時

[FindsBy(How = How.XPath, Using = "//input[contains(@ng-model,'model.BrancheName')]/following-sibling::span")] 
private IWebElement TooltipBrancheName; 

以下方法得到這個工具提示的文字:

public string GetTooltiptekstDatabaseBranche() 
     { 
      string text = TooltipBrancheName.GetAttribute("class"); 
      Actions actions = new Actions(driver); 
      actions.MoveToElement(TooltipBrancheName).Perform(); 
      //actions.MoveToElement(driver.FindElement(By.XPath("//input[contains(@ng-model,'model.BrancheName')]/following-sibling::span"))).Perform(); 
      return TooltipBrancheName.GetAttribute("title"); 
     } 

當我把這個方法從我的測試類a System.Refelection.TargetException:對象與目標類型不匹配。使用MoveToElement方法在行上引發異常。

該方法中的第一行代碼僅用於檢查ToolTipBrancheName IWebElement屬性是否存在,而不是Null,這是因爲它爲我提供了正確的class屬性值。

當我取消註釋註釋行並註釋該行將提供異常該方法工作正常。所用的定位器在兩條線中都是相同的。我很好奇是什麼導致此異常,字段ToolTipBrancheName存在,不是空的,是正確的類型IWebElement

回答

0

試試這個在第二行,也許它的工作原理:

private IWebElement TooltipBrancheName {get; set;} 
+0

我試過但仍然得到相同的異常。 – Frank

0

一個小歷史:

測試來比較使用反射2個DTO的一種方法,當我實際通過相同的異常跌跌撞撞昨天。在我的情況下,問題是我不小心使用了兩個不同的DTO類(例如ServerDTO, AccountDTO),當反射從第一個DTO獲得屬性時,它在第二個中找不到它。

野生猜測:

我要把跳槽這裏和猜測,你的回報FindsBy是不一樣什麼WebDriver回報。如果您的驅動程序(例如)ChromeDriver,它返回一個ChromeWebElement,但也許,FindsBy(因爲屬性從webdriver的independed),返回IWebElement(它使用WebElement接口)。

當您使用Actions actions = new Actions(driver);,這是可能的,它必須使用的webdriver的對象(ChromeWebElementFireFoxWebElement,取決於你用什麼驅動程序)。當Perform()運行時,它使用反射來獲取WebElement的屬性(這是一個例外是一個死牌)。在這一點上,也許它假定元素是ChromeWebElement,而不是一個IWebElement,(因此例外,它會嘗試得到的東西,在ChromeWebElement有,但不是IWebElement,像什麼我碰到與DTO的跌跌撞撞)。

P.S.我上面所說的是純粹的假設,但也許它可能是一個幫助進一步調查的打擊。