C# 如何以正确的方式关注某个元素?

C# 如何以正确的方式关注某个元素?,c#,selenium,webdriver,C#,Selenium,Webdriver,我正在用C#中的SeleniumWebDriver进行webtest。但是我遇到了一个问题,当浏览器窗口不是全尺寸时,一个弹出窗口会在可见区域的一半之外打开 问题是,当我启动.Click()时;它没有做任何事情,因为我尝试单击的链接在查看区域之外 那么,我如何专注于链接以获得点击工作呢?我目前正在使用以下解决方法,但我认为这不是一个好方法 _blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");

我正在用C#中的SeleniumWebDriver进行webtest。但是我遇到了一个问题,当浏览器窗口不是全尺寸时,一个弹出窗口会在可见区域的一半之外打开

问题是,当我启动.Click()时;它没有做任何事情,因为我尝试单击的链接在查看区域之外

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

        _blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
        _blogPostPage.FindElement(By.XPath(_popupLogin)).Click();

带空格的sendkeys关注链接并使每次单击都有效,但是否有正确的方法可以做到这一点?

我们一直在使用Selenium,也遇到了这个问题。我不知道这是否是整个WebDriver、C#实现、Firefox版本等,但我们找到了一个可行的解决方法:

诀窍是强制Selenium对
RemoteWebElement
类(由
FirefoxWebElement
继承并实现
IWebElement
)上的
LocationScreenoneCrolledinToView
属性求值。这将强制浏览器滚动以使图元处于视图中

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

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;
        }
    }
}
这样,我们所要做的就是更改生成的代码:

driver.FindElement(By.Id("elementId")).Click();
致:


希望它对你有用

不要对空白值执行send键,而是将其发送到空格。这是选择复选框的快捷键

只需替换代码:

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click();

driver.find_元素(:id,“edit section”)。发送_keys”“
,并为我留出空间


我在selenium-server-2.24.1中使用webdriver rspec,而我在IE8中遇到了问题-我一直得到
selenium::webdriver::Error::ElementNotVisibleError
。它在IE9和FF中工作,但在我添加“发送密钥”之前不是IE8。

很酷,谢谢,我将在周一尝试:),看起来比我的解决方案更好;)我以前也用过这个代码。但对于较新的Gecko驱动程序,LocationScreenOnCeScrolledToView只返回坐标,而不再滚动!这个解决方案现在已经过时了。谢谢壁虎们!你把它弄坏了!
_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click();
_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(Keys.Space);