簡體   English   中英

加載頁面后,selenium獲取當前URL

[英]selenium get current url after loading a page

我在Java中使用Selenium Webdriver。 我想在點擊“下一步”按鈕后從第1頁到第2頁獲取當前網址。這是我的代碼:

    WebDriver driver = new FirefoxDriver();
    String startURL = //a starting url;
    String currentURL = null;
    WebDriverWait wait = new WebDriverWait(driver, 10);

    foo(driver,startURL);

    /* go to next page */
    if(driver.findElement(By.xpath("//*[@id='someID']")).isDisplayed()){
        driver.findElement(By.xpath("//*[@id='someID']")).click();  
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='someID']")));
        currentURL = driver.getCurrentUrl();
        System.out.println(currentURL);
    }   

在獲取當前url之前,我有隱式和顯式等待調用以等待頁面完全加載。 但是,它仍然打印出第1頁的網址(預計它將成為第2頁的網址)。

就像你說的那樣,因為下一個按鈕的xpath在每個頁面上是相同的,所以它不起作用。 它的編碼工作方式是它等待元素顯示,但由於它已經顯示,因此隱式等待不適用,因為它根本不需要等待。 為什么不使用url更改的事實,因為從您的代碼開始,單擊下一個按鈕時它會更改。 我做C#,但我想在Java中它會是這樣的:

WebDriver driver = new FirefoxDriver();
String startURL = //a starting url;
String currentURL = null;
WebDriverWait wait = new WebDriverWait(driver, 10);

foo(driver,startURL);

/* go to next page */
if(driver.findElement(By.xpath("//*[@id='someID']")).isDisplayed()){
    String previousURL = driver.getCurrentUrl();
    driver.findElement(By.xpath("//*[@id='someID']")).click();  
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

    ExpectedCondition e = new ExpectedCondition<Boolean>() {
          public Boolean apply(WebDriver d) {
            return (d.getCurrentUrl() != previousURL);
          }
        };

    wait.until(e);
    currentURL = driver.getCurrentUrl();
    System.out.println(currentURL);
} 

第2頁是在新的標簽頁/窗口中? 如果是這樣,請使用以下代碼:

try {

    String winHandleBefore = driver.getWindowHandle();

    for(String winHandle : driver.getWindowHandles()){
        driver.switchTo().window(winHandle);
        String act = driver.getCurrentUrl();
    }
    }catch(Exception e){
   System.out.println("fail");
    }

我用硒編碼已經有一段時間了,但你的代碼看起來還不錯。 需要注意的一點是,如果找不到元素,但超時被傳遞,我認為代碼將繼續執行。 所以你可以這樣做:

boolean exists = driver.findElements(By.xpath("//*[@id='someID']")).size() != 0

上面的布爾返回了什么? 你確定selenium實際導航到預期的頁面嗎? (這可能聽起來像一個愚蠢的問題,但你實際上是在看頁面改變...硒可以遠程運行,你知道......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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