繁体   English   中英

错误,因为硒中的元素无法单击元素

[英]Error as Element is not clickable at point in selenium

大教堂结构:

 <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>

我尝试了以下代码行用于注销:

首先单击注销符号:

   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']"));

我收到错误消息,因为元素无法点击。

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);

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM