我正在用C_中的Selenium WebDriver进行WebTest。但我有一个问题,当浏览器窗口不是全尺寸时,弹出窗口会在可见区域的一半之外打开。
问题是,当我启动.click()时,它不会执行任何操作,因为我试图单击的链接不在查看区域内。
那么,我该如何关注这个链接才能让点击工作呢?我目前正在使用以下解决方法,但我认为这不是一个好办法。
_blogPostPage.FindElement(By.XPath(_popupLogin)).SendKeys("");
_blogPostPage.FindElement(By.XPath(_popupLogin)).Click();
带有空格的sendkeys关注于链接,并使click每次都能工作,但是难道没有正确的方法来做到这一点吗?
最佳答案
我们一直在玩硒,也遇到了这个问题。我不知道是不是整个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();
希望对你有用!?
关于c# - 如何以正确的方式关注元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7349104/