我收到以下错误:
元素点击拦截异常:拦截的元素点击:元素在点(288,833)处不可单击
当我手动向下滚动页面查看元素时,selenium找到并点击了它,但只有当我向下滚动时才能帮助它。我尝试了不同的方法来解决这个问题,我已经在代码中注解掉了,但仍然没有解决?我该如何解决这个错误?
package mypackage;
import java.time.Duration;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import io.github.bonigarcia.wdm.WebDriverManager;
public class DynamicWebTable {
public static void main(String[] args) throws InterruptedException {
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.get("https://demo.opencart.com/admin/");
driver.manage().window().maximize();
WebElement username = driver.findElement(By.id("input-username"));
username.clear();
username.sendKeys("demo");
WebElement password = driver.findElement(By.id("input-password"));
password.clear();
password.sendKeys("demo");
driver.findElement(By.xpath("//button[normalize-space()='Login']")).click();
//Close popup
if(driver.findElement(By.xpath("//div[@class='modal-content']")).isDisplayed()) {
driver.findElement(By.xpath("//button[@class='btn-close']")).click();
}
driver.findElement(By.xpath("//a[normalize-space()='Sales']")).click();
driver.findElement(By.xpath("//a[normalize-space()='Orders']")).click();
//get total no of pages
String textWithTotalPages = driver.findElement(By.xpath("//div[@class='col-sm-6 text-end']")).getText();
int pages = getNumberOfPages(textWithTotalPages);
System.out.println(pages);
//
for(int p = 1; p <= 2; p++) {
WebElement active_page = driver.findElement(By.xpath("//ul[@class='pagination']//li//span"));
System.out.println("Active Page: "+active_page.getText());
Thread.sleep(3000);
//new WebDriverWait(driver, Duration.ofSeconds(10)).until(ExpectedConditions.elementToBeClickable(active_page)).click();
active_page.click();
//Actions actions = new Actions(driver);
//actions.moveToElement(active_page).click().perform();
//JavascriptExecutor e = (JavascriptExecutor)driver;
//e.executeScript("arguments[0].click();", active_page);
//get number of rows
int rows = driver.findElements(By.xpath("//table[@class='table table-bordered table-hover']//tbody/tr")).size();
System.out.println("No of Rows: "+rows);
//read rows from each page
for(int r=1; r<=rows; r++) {
String orderId = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[2]")).getText();
String store = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[3]")).getText();
String customer = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[4]")).getText();
String status = driver.findElement(By.xpath("//table[@class='table table-bordered table-hover']//tbody//tr["+r+"]//td[5]")).getText();
System.out.println(orderId+ " "+store+" "+customer+" "+status);
}
//click next page
String nextPage = Integer.toString(p + 1);
driver.findElement(By.xpath("//ul[@class='pagination']//li//a[text()='"+nextPage+"']")).click();
}
driver.quit();
}
//extract number of pages from String
public static int getNumberOfPages(String text){
return Integer.valueOf(text.substring(text.indexOf("(")+1, text.indexOf("Pages")-1));
}
}
2条答案
按热度按时间jdgnovmf1#
您必须关闭此弹出窗口
driver.findElement(By.xpath("//button[@class='btn-close']")).click
在执行之前
这将为您解决问题。我已经尝试在WATIR,它为我工作。
好的,那么试着在try catch块中写这段代码。
或者向下滚动页面并发出点击,它也可以工作
7xllpg7q2#
尝试下面的代码,我做了2更改你的代码:
active_page.click()
active_page.click()
将不起作用(您可能会得到Stale元素引用,Element未附加到页面文档异常),因此需要再次分配web元素祝你好运。