2010-07-19 47 views
6

我們頁面上的某些鏈接使用target =「_ blank」在新窗口中打開。我怎樣才能讓硒看右邊的窗口,以便我可以驗證頁面鏈接到正確的頁面?如何使用硒驗證目標=「_ blank」鏈接?

這是我一直想:

open    /page/ 
click    link=Find us on Facebook! 
pause    2000 
selectWindow  title=window title 
verifyTextPresent some text 
+1

我不熟悉的硒,所以我不可能給出一個實際的答案。然而,作爲網頁設計的一般評論,我推薦使用任何值來反對'target'屬性。 HTML中的'M'是'標記'; HTML不應該指定行爲,只是含義。對於外部鏈接,我建議使用'rel =「external」',然後使用JavaScript在新窗口中打開這些鏈接。 [實施例](http://articles.sitepoint.com/article/standards-compliant-world/3) – 2010-07-19 15:07:24

回答

5

你並不需要一個參數傳遞給selectWindow。瀏覽器會自動給你的新窗口關注,你只需告訴硒已經改變了。另外,還要確保你給你的新窗口足夠的時間驗證什麼之前實際加載:

open    /page 
click    link=Find us on Facebook! 
pause    1000 
selectWindow 
verifyTextPresent some text 
4
$this->click('css=.sf_admin_action_page:first a'); 

    $this->waitForPopUp('_blank'); 
    $this->selectWindow('_blank'); 

    $this->waitForElementPresent('css=.t-info:contains(xxx2)'); 

// PS。 selenium2

1

您應該使用selectPopUp來關注新窗口。看到它的文件:

selectPopUp:

  • 參數: WINDOWID - 用於識別上述彈出窗口,其可採取多種不同的含義

  • 的簡化選擇彈出的過程窗口(並且不提供selectWindow()已經提供的功能)。

    • 如果未指定windowID或指定爲「null」,則會選擇第一個非頂層窗口。頂部窗口是selectWindow()選擇的窗口,不提供窗口ID。如果有多個彈出窗口在使用,則不應使用此功能。否則,窗口將按照以下順序依次查找:1)窗口的「名稱」,如window.open()所指定的; 2)一個JavaScript變量,它是一個窗口的引用; 3)窗口的標題。這是由selectWindow執行的相同的有序查找。
0

我採取略有不同的做法,是迫使任何環節爲使用target = _self,使他們能夠在同一個窗口進行測試:

protected void testTextLink(WebDriver driver, final String linkText, final String targetPageTitle, final String targetPagePath) { 

    WebDriverWait wait = new WebDriverWait(driver, 20); 
    WebElement link = driver.findElement(By.linkText(linkText)); 

    // ensure that link always opens in the current window 
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    js.executeScript("arguments[0].setAttribute('target', arguments[1]);", link, "_self"); 

    link.click(); 
    wait.until(ExpectedConditions.titleIs(targetPageTitle)); 

    // check the target page has the expected title 
    assertEquals(driver.getTitle(), targetPageTitle); 
    // check the target page has path 
    assertTrue(driver.getCurrentUrl().contains(targetPagePath)); 
} 
0

只需使用此代碼。

public void newtab(){ 

System.setProperty("webdriver.chrome.driver", "E:\\eclipse\\chromeDriver.exe"); 

WebDriver driver = new ChromeDriver(); 

driver.get("http://www.w3schools.com/tags/att_a_target.asp"); 

//I have provided a sample link. Make sure that you have provided the correct link in the above line. 

driver.findElement(By.className("tryitbtn")).click(); 

new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")), Keys.NUMPAD2).build().perform(); 


// In keyboard we will press 

//ctrl+1 for 1st tab 

//ctrl+2 for 2nd tab 

//ctrl+3 for 3rd tab. 

//Same action is written in the above code. 

} 
//Now you can verify the text by using testNG 

Assert.assertTrue(condition); 
0

在這種情況下,我們可以使用按鍵響應

按鍵(定位器,keySequence) 參數:

locator - an element locator 
    keySequence - Either be a string("\" followed by the numeric keycode of the key to be pressed, normally the ASCII value of that key), or a single character. For example: "w", "\119". [Give for CTRL+T] 

Simulates a user pressing and releasing a key. 
相關問題