异常使用与PageObject IWebElement Action类时

异常使用与PageObject IWebElement Action类时

问题描述:

在我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

试试这个在第二行,也许它的工作原理:

private IWebElement TooltipBrancheName {get; set;} 
+0

我试过但仍然得到相同的异常。 – Frank

一个小历史:

测试来比较使用反射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.我上面所说的是纯粹的假设,但也许它可能是一个帮助进一步调查的打击。