1

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

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
}
}

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

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

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

4

1 回答 1

2

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

于 2012-04-11T00:38:37.863 回答