2017-06-05 63 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(); 
    }