异常使用与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;}
一个小历史:
测试来比较使用反射2个DTO的一种方法,当我实际通过相同的异常跌跌撞撞昨天。在我的情况下,问题是我不小心使用了两个不同的DTO类(例如ServerDTO, AccountDTO
),当反射从第一个DTO获得属性时,它在第二个中找不到它。
野生猜测:
我要把跳槽这里和猜测,你的回报FindsBy
是不一样什么WebDriver
回报。如果您的驱动程序(例如)ChromeDriver
,它返回一个ChromeWebElement
,但也许,FindsBy(因为属性从webdriver的independed),返回IWebElement(它使用WebElement
接口)。
但
当您使用Actions actions = new Actions(driver);
,这是可能的,它必须使用的webdriver的对象(ChromeWebElement
,FireFoxWebElement
,取决于你用什么驱动程序)。当Perform()
运行时,它使用反射来获取WebElement的属性(这是一个例外是一个死牌)。在这一点上,也许它假定元素是ChromeWebElement
,而不是一个IWebElement
,(因此例外,它会尝试得到的东西,在ChromeWebElement
有,但不是IWebElement
,像什么我碰到与DTO的跌跌撞撞)。
P.S.我上面所说的是纯粹的假设,但也许它可能是一个帮助进一步调查的打击。
我试过但仍然得到相同的异常。 – Frank