为什么我不能在初始化中使用Selenium WebDriver for C#和PageFactory执行鼠标移动

本文关键字:for PageFactory 执行 移动 鼠标 WebDriver Selenium 不能 初始化 为什么 | 更新日期: 2023-09-27 18:30:34

我在HTML中有一个链接,我使用页面对象模式用Selenium编写脚本。但是当对象使用 pageFactory 初始化时,我无法执行鼠标移动操作。所以,我有这样的课程:

class BingPage
{
private readonly IWebDriver driver;
public static readonly String BASE_URL = "http://bing.com/";
[FindsBy(How = How.XPath, Using = ".//*[@id='scpt2']/a[text()='Shopping']")]
private IWebElement ShoopingLink;
public BingPage(IWebDriver driver)
{
    this.driver = driver;
    //Page Factory will use Driver to init searchButton and queryEdit objects
    PageFactory.InitElements(driver, this);
}
public void HoverShoppingLink()
{
    Actions builder = new Actions(driver);
    IWebElement elem = driver.FindElement(By.XPath(".//*[@id='scpt2']/a[text()='Shopping']"));
    builder.MoveToElement(elem).Build().Perform();//This will work
    builder.MoveToElement(ShoopingLink).Build().Perform(); //This will fail
}
}

标有注释"这将失败"的行将引发异常"必须提供移动操作的位置。 参数名称:操作目标"

但是当我手动查找元素时 - 它可以工作。有人能告诉我为什么吗?

它是.Net的Selenium 2.0,带有IE驱动程序的.Net 4.0。

为什么我不能在初始化中使用Selenium WebDriver for C#和PageFactory执行鼠标移动

因为为元素创建的代理对象(ProxiedWebElementInterceptor)不代理ILocatable,这是Actions类对其方法的要求。这是 .NET 绑定中的一个错误。它已在当前源代码中修复,并将在即将推出的下一个公开版本 (2.21) 中提供。