尝试使用C#在selenium中使用javascript悬停在元素上

时间:2017-09-11 16:52:37

标签: javascript c# selenium

我正在努力创建一个测试,当另一个元素被鼠标指针悬停时,会导致隐藏元素出现在页面上,但我没有太多运气。该元素通常在页面上不可见,只有在可见时才能找到或抓取。我已尝试以下方法让它出现,但它想要一个事件作为一个元素,我不太熟悉javascript。

((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].dispatchEvent(mouseover);", elementToHoverOver);

它告诉我没有定义鼠标悬停,但我认为这是一个事件。那么javascript中的事件是什么,我可以使用上面的内容在一行代码中完成所有这些吗?

我也试过

Actions act = new Actions(Driver);
act.MoveToElement(element).Build().Perform();

然后等待,但这不会使元素出现,单击该元素也不会显示弹出窗口。

1 个答案:

答案 0 :(得分:0)

如果你查看dispatchEvent(例如here)的文档,你会发现它正在等待一个Event对象,所以除非你在这个地方定义了一个Event:

var mouseover = <Event definition here>

然后鼠标悬停未定义。如果你有javascript中的元素,你可以简单地调用elementToHoverOver.onmouseover()来触发悬停事件,前提是javascript代码中存在elementToHoverOver。

为了澄清,这段代码是javascript代码,所以假设你的javascript中的某个地方有这样的东西:

var myElement = document.getElementById("myelementid");

然后,您可以使用Javascript执行程序来调用onmouseover事件。

((IJavaScriptExecutor)Driver).ExecuteScript("myElement.onmouseover()");

如果您在javascript端没有合适的变量,也可以直接在ExecuteScript中调用document.getElementById。 (或者用另一种方法替换document.getElementById以识别元素,如果它没有id)。

((IJavaScriptExecutor)Driver).ExecuteScript("document.getElementById("myelementid").onmouseover()");