我在C#中使用selenium Webdriver进行webtest。但是我遇到一个问题,当浏览器窗口不是完整大小时,弹出窗口会在可见区域之外的一半打开。
问题是当我触发.Click();它没有做任何事情,因为我试图点击的链接在查看区域之外。
那么我如何专注于链接以获得点击工作?我目前正在使用以下解决方法,但我认为这不是一个好方法。
_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click();
带有空格的sendkeys聚焦于链接并且每次都使Click工作,但是没有正确的方法吗?
答案 0 :(得分: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;
}
}
}
这样我们所要做的就是改变生成的代码:
driver.FindElement(By.Id("elementId")).Click();
为:
driver.FindElementOnPage(By.Id("elementId")).Click();
希望它适合你!?
答案 1 :(得分:1)
不是为空值发送密钥,而是将其发送给空间。这是用于选择复选框的键盘快捷键。
只需替换代码:
_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click();
通过
_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys(Keys.Space);
答案 2 :(得分:0)
driver.find_element(:id, "edit-section").send_keys " "
这个空间适合我。
我正在使用带有selenium-server-2.24.1的webdriver rspec而我遇到了IE8的问题 - 我一直得到Selenium::WebDriver::Error::ElementNotVisibleError
。它在IE9和FF中工作,但在我添加send_keys“”之前没有IE8。