如何以正确的方式关注元素?

Mar*_*ann 12 c# selenium webdriver

我在C#中使用selenium Webdriver进行webtest.但是我遇到一个问题,当浏览器窗口不是完整大小时,弹出窗口会在可见区域之外的一半打开.

问题是当我触发.Click(); 它没有做任何事情,因为我试图点击的链接在查看区域之外.

那么我如何专注于链接以获得点击工作?我目前正在使用以下解决方法,但我认为这不是一个好方法.

        _blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
        _blogPostPage.FindElement(By.XPath(_popupLogin)).Click();
Run Code Online (Sandbox Code Playgroud)

带空格的sendkeys聚焦在链接上并且每次都使Click工作,但是没有正确的方法吗?

小智 15

我们一直在玩Selenium并且也遇到了这个问题.我不知道它是整个WebDriver,C#实现,Firefox等版本,但我们找到了一个好的解决方法:

诀窍是强制Selenium评估类LocationOnScreenOnceScrolledIntoView上的RemoteWebElement属性(由FirefoxWebElement和实现继承IWebElement).这会强制浏览器滚动,以便元素在视图中.

我们这样做的方法是使用扩展方法:

using OpenQA.Selenium;
using OpenQA.Selenium.Remote;

namespace Namespace
{
    public static class ExtensionMethods
    {
        public static IWebElement FindElementOnPage(this IWebDriver webDriver, By by)
        {
            RemoteWebElement element = (RemoteWebElement)webDriver.FindElement(by);
            var hack = element.LocationOnScreenOnceScrolledIntoView;
            return element;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样我们所要做的就是改变生成的代码:

driver.FindElement(By.Id("elementId")).Click();
Run Code Online (Sandbox Code Playgroud)

至:

driver.FindElementOnPage(By.Id("elementId")).Click();
Run Code Online (Sandbox Code Playgroud)

希望这对你有用!?