我有一个硒javascript代码,可以滚动到表格中的特定Web元素,以便可以选择表格行中该元素旁边的复选框。 我有以下代码有时可以工作,但有时却无法滚动到表中的元素。
public String xapthbuyTrade = "//div[text()='gtiBuyref']";
public void scrollAndSelectTrade(String gtiBuyref) throws InterruptedException {
// WebDriverWait wait = new WebDriverWait(driver, 10);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
Thread.sleep(300000);
// wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(xapthStatusCategarory)));
// visibilityOfXpathElementLocated(xapthStatusCategarory);
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", driver.findElement(By.xpath(xapthbuyTrade.replace("gtiBuyref", gtiBuyref))));
driver.findElement(By.xpath(xapthCheckBoxTrade.replace("gtiBuyref", gtiBuyref))).click();
LOGGER.info("Scroll down till the buy trade visisble");
visibilityOfCssElementLocated(cssIseUpdate);
Thread.sleep(1000);
driver.findElement(By.cssSelector(cssIseUpdate)).click();
Thread.sleep(3000);
LOGGER.info("Clicked on update button");
}
如果我手动滚动,就能看到表格中存在的元素。但是当无法滚动时,出现以下异常
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//div[text()='TSB0C590']"}
Command duration or timeout: 0 milliseconds
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:160)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:371)
at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:473)
at org.openqa.selenium.By$ByXPath.findElement(By.java:361)
at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
at pages.VETCSWSearchPage.scrollAndSelectTrade(VETCSWSearchPage.java:271)
at RepairUI.RepairHelperUI.linkSellBuyInCSWPage(RepairHelperUI.java:380)
at steps.StepDefsRepairUI.linkSellBuyInCSW(StepDefsRepairUI.java:154)
at ?.Then link the sell and buy trade in International Settlements page(CosmicTre.feature:42)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//div[text()='TSB0C590']"}
我尝试添加延迟,如代码部分中突出显示的那样,但这没有帮助。请让我知道是否需要其他信息。 我正在使用firefox是52.8.0(32位),硒版本是
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.9.1</version>
</dependency>