使用 chrome 驱动程序时元素不可点击

Posted

技术标签:

【中文标题】使用 chrome 驱动程序时元素不可点击【英文标题】:Element is not clickable at point using chrome driver 【发布时间】:2012-11-19 23:42:51 【问题描述】:

我正在尝试使用 chrome 驱动程序从 graytip 门户网站下载 PDF 格式的工资单。我正在尝试使用“driver.findElement(By.linkText(“Salary”)).click();”单击链接薪水。但我无法点击链接并失败并出现以下异常。

错误

org.openqa.selenium.WebDriverException:元素在点 (198, 139) 处不可点击。其他元素会收到点击:...(警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:37 毫秒

而且,当我运行脚本时,chrome 会为 bit torrent 打开一个额外的选项卡。所以在这里,当我运行程序时,会为“https://psdpl.greytip.in”打开一个选项卡,而为 bittorrent 打开另一个选项卡。我该如何处理?在我运行程序时打开另一个 bittorrent 选项卡。

我在这里附上代码和屏幕截图。在此处输入图像 description

代码

package com.webdriver.tests;

import static org.junit.Assert.*;

import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class PaySlipPDF 
private WebDriver driver;
private String baseUrl;
private StringBuffer verificationErrors = new StringBuffer();

@Before
public void setUp() throws Exception 
    System.setProperty("webdriver.chrome.driver", "C:\\soleti\\D-Drive\\Selenium\\chromedriver\\chromedriver.exe");
    driver = new ChromeDriver(); 
baseUrl = "https://psdpl.greytip.in/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);


@Test
public void testPayslip() throws Exception 
    driver.get(baseUrl + "/login.do");
            driver.findElement(By.id("j_username")).clear();
    driver.findElement(By.id("j_username")).sendKeys("101786");
    driver.findElement(By.id("j_password")).clear();
    driver.findElement(By.id("j_password")).sendKeys("password");
    driver.findElement(By.id("login-button")).click();
    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    //driver.findElement(By.xpath("//*[@id='home-page']/div[1]/div[1]/ul/li[2]/a")).click();
    WebElement elementToClick = driver.findElement(By.xpath("//*[@id='home-page']/div[1]/div[1]/ul/li[2]/a"));
    System.out.println(elementToClick);
    // Scroll the browser to the element's Y position
    ((javascriptExecutor) driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")");
    // Click the element
    elementToClick.click();
    //driver.findElement(By.linkText("Salary")).click();

    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    driver.findElement(By.linkText("View Payslips")).click();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    new Select(driver.findElement(By.id("payroll"))).selectByVisibleText("Mar 2012");
    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    driver.findElement(By.className("btn btn-gts-print")).click();





@After
public void tearDown() throws Exception 
    //driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) 
        fail(verificationErrorString);
    


private boolean isElementPresent(By by) 
    try 
        driver.findElement(by);
        return true;
     catch (NoSuchElementException e) 
        return false;
    

【问题讨论】:

【参考方案1】:

问题是由 BitTorrent 工具栏引起的。它通过扩展程序启动到 Chrome 中。要么完全卸载它,要么强制 Selenium 告诉 Chrome 禁用所有扩展。这可以使用 ChromeOptions 类来完成:

http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/chrome/ChromeOptions.html

使用 addArgument 方法并给它这个参数,告诉 Chrome 禁用所有用户扩展:

--disable-extensions

【讨论】:

【参考方案2】:

此问题与您系统上安装的 chrome 相关..卸载 google chrome 并重新安装..这将解决您的问题..:)

【讨论】:

【参考方案3】:

检查浏览器设置,查看默认主页是否已被安装的 bit torrent 工具栏更改。如果不需要,请尝试从浏览器中卸载 bitTorrent 工具栏并重新运行您的 selenium 程序。希望这会有所帮助。

【讨论】:

以上是关于使用 chrome 驱动程序时元素不可点击的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 自动完成锁定输入,就像它们不可点击一样

Selenium Webdriver C#,Chrome,图标隐藏元素并且不可点击[重复]

js或css指定元素点击时内容不可被选中

为啥点击事件不适用于 iOS 上的 li 元素?

Selenium python - 元素在点不可点击

如何点击不可点击的元素?