簡體   English   中英

找不到xPath SELENIUM JAVA

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM