【问题标题】:Error as Element is not clickable at point in selenium错误,因为元素在硒中的点不可点击
【发布时间】:2017-06-21 14:42:35
【问题描述】:

Dom 结构:

 <li class="slds-dropdown-trigger slds-dropdown-trigger--click slds-m-left--
  x-small" data-aura-rendered-by="534:20;a">
 <!--render facet: 537:20;a-->
 <!--
 render facet: 541:20;a--><button class="bare slds-button uiButton 
 forceHeaderButton oneUserProfileCardTrigger" aria-live="off" type="button" 
 data-aura-rendered-by="184:190;a" data-aura-class="uiButton 
 forceHeaderButton 
 oneUserProfileCardTrigger"><!--render facet: 185:190;a--><!--render facet: 
 187:190;a-->
 <div class="tooltipTrigger tooltip-trigger uiTooltip" aria-describedby="tt-
 for-174:190;a" tabindex="-1" data-aura-rendered-by="179:190;a" data-aura-
 class="uiTooltip">
 <span data-aura-rendered-by="171:190;a" class="uiImage" 
 data-aura-class="uiImage"><img data-aura-rendered-by="169:190;a" 
 src="https://c.ap5.content.force.com/profilephoto/005/T/1" 
 class="profileTrigger" alt="">
 </span><span class="tooltip-invisible" 
 role="tooltip" id="tt-for-174:190;a" data-aura-rendered-by="181:190;a">View 
 profile</span>
 </div></button><!--render facet: 543:20;a-->
 </li>

我为 Logout 尝试了这些代码行:

首先点击退出符号:

   WebDriverWait wait3 = new WebDriverWait(driver, 20); 
   driver.findElement(By.xpath("//img[@class = 'profileTrigger']")).click();
   JavascriptExecutor jse = (JavascriptExecutor)driver;
   /*exe1.executeScript("arguments[0].click();", newbt);*/
   jse.executeScript("scroll(250, 0)");

第二次点击退出按钮:

 driver.findElement(By.xpath("//a[@class = 
       'profile-link-label logout uiOutputURL']"));

我收到错误,因为 Element 无法点击。

【问题讨论】:

  • o_0... 我们必须向您发送哪个代码?请提供更多详细信息,包括完整日志
  • @FieryCat,在完整 Dom 结构之上。我想为注销编写代码。我试过上面的代码。它给出错误。错误是线程“主”org.openqa.selenium.WebDriverException 中的异常:未知错误:元素在点(1231、25)不可点击。其他元素会收到点击: (会话信息:chrome=59.0.3071.104)请帮帮我。
  • @FieryCat 准备好听到 OP 说您必须使用自己的凭据登录他的网站 :) 谢谢
  • 您使用的元素路径应该是唯一的。请使用不同的路径。
  • @Mounika 我尝试了所有路径。请发送代码以单击注销按钮。 DOM结构在上面。请帮帮我。

标签: java selenium automation


【解决方案1】:

@SrieedherSanthakumar 我几乎没有什么想先澄清的,你是否依赖等待电话。就像您正在单击某些内容并希望等待某些内容然后再进行第二次单击一样?

如果是这样,您可能需要修改您的第一个调用,如下所示:

 WebDriverWait wait3 = new WebDriverWait(driver, 20); 
       driver.findElement(By.xpath("//img[@class = 'profileTrigger']")).click();
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
       JavascriptExecutor jse = (JavascriptExecutor)driver;
       /*exe1.executeScript("arguments[0].click();", newbt);*/
       jse.executeScript("scroll(250, 0)");

一旦您等待页面加载或预期 id 可见,然后继续您的第二次调用。我无法查看您是否正在等待第一次调用中的对象加载,因为您在继续第二次调用之前单击了 profileTrigger

【讨论】:

  • @Gupta, WebDriverWait wait3 = new WebDriverWait(driver, 20); driver.findElement(By.xpath("//img[@class= 'profileTrigger']")).click();它没有点击。点击保存脚本后在同一页面中。请提出任何其他措施。
  • 这是您的代码,只是我在其中添加了等待条件。在您尝试单击的元素的情况下,您也需要检查属性。在这种情况下尝试使用类、id 或正确的 xpath。
  • @Gupta,我尝试使用类名并且链接文本仅存在。请帮助我处理任何其他代码。我收到错误消息,例如在点 (1231, 25) 处元素不可点击。其他元素会收到点击:
  • @SrieedherSanthakumar 试试这个:driver.findElement(By.xpath("//div[contains(@class,'tooltipTrigger tooltip-trigger uiTooltip')]")).click(); “tooltipTrigger tooltip-trigger uiTooltip”,这应该是您尝试单击的 div 类的名称。如果这不起作用,请开始聊天,因为我需要更多详细信息和页面来源。
  • @anushul gupta,现在元素正在定位我正在尝试注销。
【解决方案2】:

1.通过选择器使用 scrollTo 元素 - 这将确保元素可见:

WebElement element = driver.findElement(By.xpath("//button[@class='oneUserProfileCardTrigger']"));
((JavascriptExecutor) driver)
    .executeScript("arguments[0].scrollIntoView(true);", element);

2.始终使用延迟或滚动后等待点击。浏览器需要时间。

3.如果没有任何帮助 - 使用 javascript 点击。糟糕的解决方案,因为它不像真实用户那样做,但总是有效:

WebElement element = driver.findElement(By.xpath("//button[@class='oneUserProfileCardTrigger']"));
((JavascriptExecutor)driver)
    .executeScript("arguments[0].click();", element);

【讨论】:

  • 我尝试了所有定位器。请帮我一些其他的代码。我收到错误,例如元素不可点击。我尝试了所有定位器。请帮助我使用其他代码。上面有dom结构。
  • @SrieedherSanthakumar 好的,元素不可点击的原因:它不可见或其他元素(如模态或其他元素)与其重叠。最终的解决方案可能不是使用 selenium click,而是使用 javascript click - 不是最好的,但应该可以。使用此选项更新我的答案 (#3)
  • @SrieedherSanthakumar 我已经添加了代码。请参阅答案正文中的选项 #3
  • 因为里面没有id。只有类名和链接文本。我都试过了。两者都不能正常工作。我会尝试使用 javascript 执行器,我会更新你。请帮助我使用其他一些注销代码。上面我发送了完整的 DOM 结构以注销。请帮助我。
  • @SrieedherSanthakumar 这是您的选择器的最终代码: WebElement element = driver.findElement(By.xpath("//button[@class='oneUserProfileCardTrigger']")); ((JavascriptExecutor)driver) .executeScript("arguments[0].click();", element);
猜你喜欢
  • 2018-01-09
  • 2019-11-28
  • 2020-11-28
  • 1970-01-01
  • 2016-07-08
  • 2019-01-26
  • 2021-07-27
  • 2018-02-04
  • 2023-01-19
相关资源
最近更新 更多