Как правильно сосредоточиться на элементе? - PullRequest
12 голосов
/ 08 сентября 2011

Я делаю веб-тестирование с использованием Selen Webdriver в C #.Но у меня есть проблема, когда окно браузера не в полном размере, всплывающее окно открывается на полпути за пределами видимой области.

Проблема в том, что когда я запускаю .Click ();он ничего не делает, потому что ссылка, по которой я пытаюсь щелкнуть, находится за пределами области просмотра.

Итак, как мне сфокусироваться на ссылке, чтобы заставить ее работать?В настоящее время я использую следующий обходной путь, но я не думаю, что это хороший способ.

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

Sendkeys с пробелом фокусируется на ссылке и заставляет Click работать каждый раз, но нет правильного способа сделатьэто?

Ответы [ 3 ]

15 голосов
/ 20 сентября 2011

Мы играли с 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;
        }
    }
}

таким образом, все, что нам нужно сделатьизменить сгенерированный код с:

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

на:

driver.FindElementOnPage(By.Id("elementId")).Click();

Надеюсь, это работает для вас!?

1 голос
/ 11 июня 2012

Вместо отправки ключа для пустого значения отправьте его для пробела. Это сочетание клавиш, чтобы установить флажок.

Просто замените код:

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

по

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(Keys.Space);
0 голосов
/ 29 июня 2012

driver.find_element(:id, "edit-section").send_keys " " с пробелом у меня сработало.

Я использую веб-драйвер rspec с selenium-server-2.24.1 и у меня были проблемы с IE8 - я продолжал получать Selenium::WebDriver::Error::ElementNotVisibleError.Он работал в IE9 и FF, но не в IE8, пока я не добавил send_keys "".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...