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

运行selenium webdriver脚本时无法单击超链接,selenium,selenium-webdriver,xpath,css-selectors,webdriverwait,Selenium,Selenium Webdriver,Xpath,Css Selectors,Webdriverwait,我一直在尝试点击超链接,它会在屏幕上弹出一个窗口。由于某些原因,它不起作用,当前超链接的html如下所示: 正在尝试使用以下代码: new WebDriverWait(driver, 50).until(ExpectedConditions.elementToBeClickable(By.linkText("Select Hours"))).click(); 还尝试: driver.findElement(By.id("operating_hours")).click(); 有趣的是,我

我一直在尝试点击超链接,它会在屏幕上弹出一个窗口。由于某些原因,它不起作用,当前超链接的html如下所示:

正在尝试使用以下代码:

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

driver.findElement(By.id("operating_hours")).click();
有趣的是,我也没有得到任何错误,只是没有点击超链接。 运行脚本后,这就是屏幕截图

而脚本应该已经打开了这个弹出窗口
@DebanjanB希望这能澄清问题。

这里有几个例子可以通过不同的选择器点击链接:

单击全文链接

WebElement element = driver.findElement(By.linkText("My Link"));
linkByText.click();
WebElement element = driver.findElement(By.partialLinkText("First"))
linkByPartialText.click();
单击部分文本链接

WebElement element = driver.findElement(By.linkText("My Link"));
linkByText.click();
WebElement element = driver.findElement(By.partialLinkText("First"))
linkByPartialText.click();
使用XPath单击文本链接

WebElement element = driver.findElement(By.xpath("//a[text()='First']"));
linkByTextUsingXPath.click();
WebElement element = driver.findElement(By.xpath("//a[contains(text(),'ABC')]"));
linkByPartialTextUsingXPath.click();
使用XPath单击部分文本链接

WebElement element = driver.findElement(By.xpath("//a[text()='First']"));
linkByTextUsingXPath.click();
WebElement element = driver.findElement(By.xpath("//a[contains(text(),'ABC')]"));
linkByPartialTextUsingXPath.click();
如果需要,也可以使用显式等待:

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


希望这有帮助,

以下是通过不同选择器单击链接的几个示例:

单击全文链接

WebElement element = driver.findElement(By.linkText("My Link"));
linkByText.click();
WebElement element = driver.findElement(By.partialLinkText("First"))
linkByPartialText.click();
单击部分文本链接

WebElement element = driver.findElement(By.linkText("My Link"));
linkByText.click();
WebElement element = driver.findElement(By.partialLinkText("First"))
linkByPartialText.click();
使用XPath单击文本链接

WebElement element = driver.findElement(By.xpath("//a[text()='First']"));
linkByTextUsingXPath.click();
WebElement element = driver.findElement(By.xpath("//a[contains(text(),'ABC')]"));
linkByPartialTextUsingXPath.click();
使用XPath单击部分文本链接

WebElement element = driver.findElement(By.xpath("//a[text()='First']"));
linkByTextUsingXPath.click();
WebElement element = driver.findElement(By.xpath("//a[contains(text(),'ABC')]"));
linkByPartialTextUsingXPath.click();
如果需要,也可以使用显式等待:

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


希望这会有所帮助,

根据您共享的HTML而不是
链接文本,您可以使用以下方法之一并:

  • css选择器

    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();
    
  • 如果仍然无法调用所需元素上的
    单击()
    ,则可以按如下方式使用类:

    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();
    
    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);
    
  • 作为替代方案,您可以使用接口中的方法,如下所示:

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

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

  • css选择器

    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();
    
  • 如果仍然无法调用所需元素上的
    单击()
    ,则可以按如下方式使用类:

    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();
    
    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);
    
  • 作为替代方案,您可以使用接口中的方法,如下所示:

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

请提供HTML代码,请将代码格式化为可读性更强的代码,请使用代码块,tnx请提供HTML代码,并将代码格式化为可读性更强的代码,请使用代码块,tnx两者都使用,但没有改进。。谢谢你@debanjanb@JaffarLone
无改善
不会揭示出发生了什么错误。你能用你当前看到的代码测试和错误更新这个问题吗?我附上两个截图,因为我没有从testNG或Eclipse获得任何错误日志,这就是我所得到的一切。@JaffarLone签出我的答案更新并让我知道状态第二个选项正在工作,弹出窗口终于在主屏幕上打开了。谢谢:)两种方法都试过了,但都没有改进。。谢谢你@debanjanb@JaffarLone
无改善
不会揭示出发生了什么错误。你能用你当前看到的代码测试和错误更新这个问题吗?我附上两个截图,因为我没有从testNG或Eclipse获得任何错误日志,这就是我所得到的一切。@JaffarLone签出我的答案更新并让我知道状态第二个选项正在工作,弹出窗口终于在主屏幕上打开了。谢谢:)