[英]Unable to find xPath SELENIUM JAVA
我遇到无法找到xpath的keep throw错误,因为我设置了打开此xpath的循环以插入数据。 尽管我将等待存在的时间设置为60secound,但仍然找不到它。 我一直在尝试使用标题或状态来调用此方法,因此它仍然无法正常工作。 好心提醒
HTML:
<a href="javascript: void edit('edit_total_amt')" title="Override total tax amount" onmouseover="status='Override total tax amount'; return true">91.14</a>
代码:
public void clickOnItemTax () {
By xPath = By.xpath("//a[contains(@href,'edit_total_amt')]");
this.sleep(3);
if (this.waitForExistence(xPath,60)) {
WebElement domLink = linkGet(xPath);
domLink.click();
} else {
JLog.fail("Unable to find a writable item taxdialog!");
}
}
-waitforExistence
public boolean waitForExistence(By by, int timeoutSeconds){
boolean exists = false;
Long polling_interval = (long) 250;
Long timeout = (long) timeoutSeconds * 1000; // in seconds
Long elapsed = (long) 0;
while (elapsed <= (timeout)) {
if (exists(by)) {
exists = true;
break;
}
try {
Thread.sleep(polling_interval);
} catch (InterruptedException e) {
JLog.warning(JLog.getStackTraceAsString(e));
break;
}
elapsed += polling_interval;
}
if (elapsed >= timeout) {
JLog.warning("waitForExistence waited for " + timeout/1000 + " seconds, but unable to find: " + by.toString());
}
return exists;
}
谢谢
如果这是公司内部网站,我建议您提供一个“ id”以简化您的生活。 如果没有,您可以这样做。 当您可以使用Selenium中的隐式或显式等待时间时,人们总是编写自己的等待方法,这让我总是感到惊讶。
前者如下所示,使用此方法要注意的唯一事情是,在查找元素时,它将始终等待这么长时间。 但是,这是编写脚本以查找元素并且不会使代码膨胀的更安全的方法:
driver.manage().timeouts().implicitlyWait(6, TimeUnit.SECONDS);
if (driver.findElements(By.cssSelector("//*[@title=\"Override total tax amount\"]")).size()!=0)
{
driver.findElement(By.cssSelector("//*[@title=\"Override total tax amount\"]")).click();
}
else
{
JLog.fail("Unable to find a writable item taxdialog!");
}
显式的方法如下,其中10秒是您的秒数:
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("//*[@title=\"Override total tax amount\"]")));
有关更多信息,请参见以下链接。 http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.