当前位置: 首页 > 面试题库 >

通过Selenium驱动程序执行Javascript elementFromPoint

夏理
2023-03-14
问题内容

我正在尝试对大多数商业自动化工具中常见的基于Selenium的框架实施“对象选择器”。为此,我正在使用Javascript命令在鼠标位置找到该元素,但没有得到我期望的元素。

如果我使用的是ChromeDriver或InternetExplorerDriver,则脚本始终返回标头对象。无论我查看什么网页或鼠标的位置。尽管听起来好像脚本采用的是坐标0,但0而不是鼠标位置,我已经确认Cursor.Position发送了正确的值。

如果我使用FirefoxDriver,则会出现异常:

"Argument 1 of Document.elementFromPoint is not a finite floating-point value. (UnexpectedJavaScriptError)"

谁能看到我在做什么错?

    private void OnHovering()
    {
        if (Control.ModifierKeys == System.Windows.Forms.Keys.Control)
        {
            IWebElement ele = null;
            try
            {
                // Find the element at the mouse position
                if (driver is IJavaScriptExecutor)
                    ele = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript(
                        "return document.elementFromPoint(arguments[0], arguments[1])", 
                        new int[] { Cursor.Position.X, Cursor.Position.Y });

                // Select the element found
                if (ele != null)
                    SelectElement(ele);
            }
            catch (Exception) { }
        }
    }

谢谢!


问题答案:

它实际上是关于如何将坐标传递到脚本中的。
脚本参数必须单独指定为单独的ExecuteScript()参数。在您的情况下发生的事情是,您基本上已经指定了一个x参数,使其认为y应该将其视为默认0值。并且y=0通常有一个标头。

代替:

ele = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript(
                        "return document.elementFromPoint(arguments[0], arguments[1])", 
                        new int[] { Cursor.Position.X, Cursor.Position.Y });

你应该做:

ele = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript(
                        "return document.elementFromPoint(arguments[0], arguments[1])", 
                        Cursor.Position.X, Cursor.Position.Y);


 类似资料:
  • 问题内容: 可能是一个简单的问题,但我找不到有关此的任何信息。 我曾经以这种方式运行selenium2.x。我启动服务器: 然后运行测试。我使用Dart,所以我这样做 但是现在我正在尝试使用selenium3。我已经下载了它,并用新的jar替换了旧的终端调用,但看来我可以做到。Selenium告诉我它不知道这样的参数“ -Dwebdriver.chrome.driver”。在帮助中,我看不到用于指

  • 新的Google chrome更新会在浏览器中出现这样的信息:“您正在使用不受支持的命令行标志:--Ignore-Certifice-Errors。稳定性和安全性将受到影响。” 根据我在selenium bug报告中读到的内容,临时解决方案是启动webdriver

  • 我试图通过网络驱动程序在“http://www.kayak.co.in/?ispredir=true”中选择入住和退房时间。无法选择任何日期。请帮帮我。

  • 问题内容: 新的Google chrome更新导致浏览器中出现此消息:“您使用的是不受支持的命令行标志:-ignore-certificate- errors。稳定性和安全性将受到损害。” 根据我对selenium错误报告的了解,临时解决方案是使用 创建驱动程序时,我已经在传递DesiredCapabilities了。如何将ChromeOptions和DesiredCapabilities都传递给

  • 问题内容: 我正在尝试运行一个ruby文件,该文件将使用seleniumwebdriver启动chrome驱动程序。我有selenium独立服务器2.35.0。和chromedriver可执行文件已安装。我正在通过运行服务器来启动 两个会话正在启动,chrome驱动程序无法启动。 这是在我使用以下文件运行文件之后 我对此并不陌生,无法找出问题所在。而且,我也试图让它无头运行,所以我正在运行Xvfb

  • 我试图运行一个ruby文件,这将启动chrome驱动程序使用selenium WebDriver。我有selenium独立服务器2.35.0。和chromedriver可执行文件安装。我通过运行来启动服务器, 这是在我使用 我对此很陌生,不知道哪里出了问题。我也试图无头运行它,所以我有Xvfb运行。有人能帮我指出我犯的错误并启动chromedriver吗? 更新: 谁能帮我弄清楚出了什么问题吗?