运行 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);
我一直在尝试单击导致屏幕上出现弹出窗口的超链接。由于某种原因它不起作用,目前超链接的 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);