Подтвердить что ты не робот

Как сфокусироваться на элементе правильно?

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

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

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

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

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

4b9b3361

Ответ 1

Мы играли с Selenium и столкнулись с этой проблемой. Я не знаю, является ли это WebDriver в целом, реализация С#, версия Firefox и т.д., Но мы нашли способ обхода ok:

Хитрость заключается в том, чтобы заставить 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();

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

Ответ 2

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

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

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

_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(Keys.Space);

Ответ 3

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

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