Ruby Selenium Webdriver 元素不可点击。

3
我遇到了一个错误:

元素在 (100,12) 点不可点击。其他元素会接收此次点击。

我对这个问题进行了一些研究,以下是我尝试过的解决方案:
  1. Maximize Window

    driver.manage.window.maximize
    
  2. Scroll into view

    driver.execute_script("arguments[0].scrollIntoView(true);", element)
    sleep(3)
    
这些都似乎不起作用。
这是HTML的布局。
 <body>
   <div>
     <div>
       <div>
         <ul>
           <li> <a> Click me </a>
   ...

我获取元素的方式是:
 element = driver.find_element(:xpath, "//li/a[contains(text(), 'Click me')]"

有人知道我做错了什么吗?我还能做些什么?

如果你查看异常,它应该会告诉你其他元素的HTML将接收点击。那是什么元素?你认识那个元素吗?也许它是一些弹出式div覆盖了你想要的元素或者其他原因? - JeffC
我看到了。它就在屏幕顶部的标志。它在那里点击没有意义。而且它点击的坐标是(100,12),我认为这是左上角?这不是预期链接的位置。 - Jonny Peppers
那是一条有用的信息。现在你应该检查你的定位器并确保它获取了你想要的元素。它可能不够具体,找到的元素可能不止一个。你可以打印outerHTML来查看元素的HTML,以确保它是正确的,并根据需要调整定位器。 - JeffC
@JeffC 我是selenium webdriver和ruby的新手。你能告诉我如何打印outerhtml吗?需要通过javascript吗? - Jonny Peppers
我不懂Ruby,但你想获取元素的属性"outerHTML"。如果你谷歌一下,应该能找到它。 - JeffC
2个回答

3
在这种情况下,你应该尝试使用以下方法执行click.execute_script
element = driver.find_element(:xpath, "//li/a[contains(text(), 'Click me')]")
driver.execute_script("arguments[0].click();", element)

希望这能帮到你... :)

非常感谢,节省了很多时间。 - Shell Scott

0

如果您正在尝试使用坐标单击元素,请确保您拥有精确的坐标。您可以尝试以下代码:

ele = driver.find_element(:xpath, "//li/a[contains(text(), 'Click me')]"

int eleXCoordinate = ele.getLocation().getX();
int eleYCoordinate = ele.getLocation().getY();  

现在使用Robot类首先验证坐标是否正确。
Robot robot = new Robot();
robot.mouseMove(dragElementXCoordinate, dragElementYCoordinate);

如果鼠标移动到元素上,那么你就可以继续了。否则,请尝试通过试错法添加一些值以确定精确坐标。例如:
Robot robot = new Robot();
robot.mouseMove(dragElementXCoordinate +310, dragElementYCoordinate +100);

现在你可以在屏幕上看到鼠标移动到元素上,执行点击操作。

robot.mousePress(InputEvent.BUTTON1_MASK);

然后松开鼠标

robot.mouseRelease(InputEvent.BUTTON1_MASK);

希望这能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接