2016-11-09 35 views
0

我在頁面中有一個元素,如下所示。我如何使用Selenium來獲取文本「添加新成員」。使用Selenium在href中查找HTML元素

<a ng-if="userCanEdit" class="btn btn-primary ng-scope" ui-sref="orgs-add" href="#/orgs/add"> 
    <i>Add New Member</i> 
</a> 

我做了以下嘗試這個代碼,但它不工作

System.out.println(driver.findElement(By.cssSelector("a[href='#/orgs/add']")).getText()); 

而且,我的JavaScript控制檯,計算表達式,('a[href="#/orgs/add"]')正確。

編輯:我剛碰到如下,當我嘗試上面的代碼。

*** Element info: {Using=css selector, value=a[href='#/orgs/add']} 
    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:216) 
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:635) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:368) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:465) 
    at org.openqa.selenium.By$ByCssSelector.findElement(By.java:430) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:360) 
    at hello.validate(hello.java:101) 
    at hello.main(hello.java:60) 
+0

有啥輸出的你,你所提到的代碼的故事嗎? –

+0

你的HTML說「#/ members/add」,但你的cssSelector使用「#/ orgs/add」。任何你犯錯的機會 - 你只需要使用「#/ members/add」? –

+0

@StoyanBerov,這不是原因。我剛纔編輯過。我試圖發佈一個樣本。 – learningboy

回答

1

當使用硒與角度,在大多數情況下,你可能需要添加一些明確的等待,因爲DOM元素是動態創建/修改角。

例如,您可以嘗試使用下面的代碼添加明確的等待:

http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp

WebDriver driver = new FirefoxDriver(); 
driver.get("http://somedomain/url_that_delays_loading"); 
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) 
.until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 

替換By.id("myDynamicElement")與元素定位。

希望這會有所幫助。

0

試試這個:

driver.findElement(By.cssSelector("a.btn.btn-primary.ng-scope")).getText(); 
-1

試試這個,

driver.findElement(By.className("btn btn-primary ng-scope")).getText(); 
+0

這不起作用,因爲您不能使用複合類名。 – JeffC

相關問題