Как сфокусироваться на элементе правильно?
Я делаю веб-тест с использованием селена Webdriver в С#. Но у меня проблема, когда окно браузера не в полном размере, всплывающее окно откроется наполовину вне видимой области.
Проблема заключается в том, что когда я запускаю .Click(); он ничего не делает, потому что ссылка, которую я пытаюсь щелкнуть, находится за пределами просматриваемой области.
Итак, как я могу сосредоточиться на ссылке, чтобы получить щелчок, чтобы работать? В настоящее время я использую следующее обходное решение, но я не думаю, что это хороший способ.
_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click();
Ссылочки с пробелом фокусируются на ссылке и делают работу Click каждый раз, но нет ли правильного пути для этого?
Ответы
Ответ 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 "".