运行 selenium webdriver 脚本时无法单击超链接

Unable to click on hyperlink when running selenium webdriver script

我一直在尝试单击导致屏幕上出现弹出窗口的超链接。由于某种原因它不起作用,目前超链接的 html 是这样的:

<a href="javascript:void(0)" class="operating-hours left">Select Hours</a>

尝试使用此 selenium 代码:​​

new WebDriverWait(driver, 50).until(ExpectedConditions.elementToBeClickable(By.linkText("Select Hours"))).click(); 

也尝试过:

driver.findElement(By.id("operating_hours")).click();

有趣的是我也没有收到任何错误,只是超链接没有被点击。 screenshot after running the script 运行脚本后,就是截图了

而脚本本应打开此弹出窗口 window popup that should open after running the script @DebanjanB 希望能澄清问题。

以下是通过不同选择器点击 link 的几个示例:

点击link全文

WebElement element = driver.findElement(By.linkText("My Link"));
linkByText.click();

按部分文字点击link

WebElement element = driver.findElement(By.partialLinkText("First"))
linkByPartialText.click();

使用 XPath 按文本单击 link

WebElement element = driver.findElement(By.xpath("//a[text()='First']"));
linkByTextUsingXPath.click();

使用 XPath 按部分文本单击 link

WebElement element = driver.findElement(By.xpath("//a[contains(text(),'ABC')]"));
linkByPartialTextUsingXPath.click();

此外,如果需要,请使用显式等待:

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(selector));

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("some_link")));
element.click();

希望对您有所帮助,

根据您分享的 HTML 而不是 linkText 您可以使用以下任一方法和 :

  • cssSelector:

    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.operating-hours.left"))).click();
    
  • xpath:

    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='operating-hours left'][contains(.,'Select Hours')]"))).click();
    
  • 如果您仍然无法在所需元素上调用 click(),您可以使用 Actions Class,如下所示:

    WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.operating-hours.left")));
    //WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='operating-hours left'][contains(.,'Select Hours')]")));
    new Actions(driver).moveToElement(element).click().build().perform();
    
  • 作为替代方案,您可以使用 executeScript() method from the JavascriptExecutor 界面,如下所示:

    WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.operating-hours.left")));
    //WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='operating-hours left'][contains(.,'Select Hours')]")));
    (JavascriptExecutor)driver.executeScript("arguments[0].click();", element);