2016-11-09 1 views
0

У меня есть элемент на моей странице следующим образом. Как я могу использовать Selenium для получения текста «Добавить нового участника».Использование Selenium для поиска элемента HTML с классами внутри href

<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

@ СтоянБеров, нет, это не причина. Я только что редактировал выше. Я пытался опубликовать образец. – learningboy

ответ

1

При использовании Selenium с Угловое, в большинстве случаев, вам может понадобиться, чтобы добавить некоторые явные ожидания, так как элемент 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