【问题标题】:click the bottom part of an element?单击元素的底部?
【发布时间】:2017-06-06 04:33:11
【问题描述】:

我有一个需要点击的链接,它位于另一个元素的下方。像这样的:

______________________
| 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 是一张图片(我需要点击 PO Box 链接)。我不知道在这里做什么。谢谢!

这是有问题的 HTML。 Selenium 正在将点击动作发送到 span 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 -->

【问题讨论】:

  • 我认为唯一的出路是Actions class。谢谢
  • 我该怎么做?我之前只使用Actions 进行悬停操作。
  • 点击想要的元素会有点棘手。如果它是公共网址,您可以分享网址吗?请提及手动步骤以供参考。谢谢

标签: java selenium


【解决方案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();

【讨论】:

  • 是的!做到了!我尝试在.moveToElement 方法中将10 添加到yOffSet,但这不起作用。添加.moveByOffset 确实有效。非常感谢!
  • 可能 .moveToElementyOffSet 也有帮助,但它会从元素的顶部开始,所以你应该这样做,只是不要在 2 上划分高度 =)
【解决方案2】:

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

【讨论】:

  • 那行不通。定位元素不是问题,它是 selenium 单击顶部元素而不是 PO Box 链接。
【解决方案3】:

这主要发生在 Chrome 中。 Chrome 不计算元素的准确位置,总是点击元素的中间。

要解决这个问题,获取元素坐标然后点击链接

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

【讨论】:

    【解决方案4】:

    我建议您以更广泛的方式看待问题并实现一种方法来单击元素上的任意位置。下面是代码sn-p。我用 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();
        }
    

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多