2017-06-05 97 views
-1

我有一个链接,我需要点击,是在另一个元素下面的一半。事情是这样的:单击元素的底部部分?

______________________ 
| A ____________ | <-- on top 
|____|B_________|____| 
    |__________| < - on bottom (need to click this one) 

当我尝试单击底部的链接,我得到

(B) is not clickable at point (254, 5). Other element would receive the click: (A). 

Here是图像(我需要点击邮政信箱链接)。我不知道该在这里做什么。谢谢!

这里是有问题的HTML。硒正在发送点击动作跨度labelFieldWrapper

<div class='clr type_address formFieldContainer'> 
    <span class="labelFieldWrapper"> 
     <label class="placeholder" for="address1"> 
      <span class="labelText">Address 1</span> 
     </label> 
     <input id="address1" name="address1" type="text" value="" autofillparam="ON" size="20" maxlength="60"/><span class="asterisk">*</span> 
    </span> 
    <p class="helpLink"> 
     <a href="javascript: void(0)" 
      onclick="window.open('/checkout/canadian_province_support.jsp', 
      'pobox', 
      'width=450, \ 
      height=200, \ 
      directories=no, \ 
      location=no, \ 
      menubar=no, \ 
      resizable=no, \ 
      scrollbars=1, \ 
      status=no, \ 
      toolbar=no'); 
      return false;">PO Box?</a> <-- Trying to click on this link 
     </p> 
    </div><!-- /formFieldContainer --> 
+0

我认为唯一的出路是'Actions'类。谢谢 – DebanjanB

+0

我该怎么做?我之前只使用过“动作”进行悬停动作。 – kroe761

+0

点击目标元素会有点棘手。你能分享网址,因为它是一个公共网址吗?请提及手动步骤以供参考。谢谢 – DebanjanB

回答

1

上,如果这种情况下,你可以做一些变通方法,比如点击元素的底部

WebElement element = driver.findElement(By.xpath("someXpath")); 
int halfOfHeight = element.getSize().getHeight()/2; 
// moveToElement* method moves to the middle of element, so we'll also move on half of element and click on the 3rd pix from the bottom 
int offset = halfOfHeight - 3; 

Actions actions = new Actions(driver); 
actions 
     .moveToElement(element) 
     .moveByOffset(0, offset) 
     .click() 
     .build() 
     .perform(); 
+0

是的!那样做了!我尝试在'.moveToElement'方法中的'yOffSet'中添加'10',但这不起作用。添加'.moveByOffset'的确奏效。非常感谢! – kroe761

+0

很高兴听到)欢迎您) –

+0

也许''.moveToElement'带'yOffSet'也可以帮助,但它会从元素顶部开始,所以您应该做同样的事情,只是不要在2 =上划分高度) –

0

我认为你可以使用 的XPath = //p[@class="helpLink"]/a

+0

这是行不通的。针对元素不是问题,它是硒点击顶部元素,而不是PO Box链接。 – kroe761

0

这种情况多发生在Chrome中。 Chrome不会计算元素的确切位置,并始终在元素中间点击。

为了解决这个问题,得到的单元坐标,然后单击链接

WebElement link= driver.findElement(By.xpath("xpath of link")); 
((JavascriptExecutor)driver).executeScript("window.scrollTo(0,"+link.getLocation().x+")"); 
link.click(); 
0

我建议你以更广泛的方式来看问题,并实现一种方法来单击元素上的任意位置。以下是代码片段。我在C#中编写了下面的代码并成功地进行了测试。 x和y坐标是根据元素大小分配的,这使元素更容易执行操作。

你可以实现一个方法ClickElementAt并调用下面的方法。

ClickElementAt(element,Bottom);//Calling the method here 

//Implementation 
    public void ClickElementAt(Element element, ClickPoint clickPoint) 
    { 
     int x, y; 

     switch (clickPoint) 
     { 
      case ClickPoint.Center: 
       x = element.Size.Width/2; 
       y = element.Size.Height/2; 
       break; 
      case ClickPoint.Top: 
       x = element.Size.Width/2; 
       y = element.Size.Height/10; 
       break; 
      case ClickPoint.Left: 
       x = element.Size.Width/10; 
       y = element.Size.Height/2; 
       break; 
      case ClickPoint.Right: 
       x = element.Size.Width * 90/100; 
       y = element.Size.Height/2; 
       break; 
      case ClickPoint.Bottom: 
       x = element.Size.Width/2; 
       y = element.Size.Height * 90/100; 
       break; 
      default: 
       throw new ArgumentOutOfRangeException("clickPoint"); 
     } 

     var actions = new Actions(this.driver); 
     actions 
      .MoveToElement(element, x, y) 
      .Click() 
      .Perform(); 
    }