我的页面中有一个元素如下。如何使用Selenium获取文本“添加新成员”。
<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 :(得分:1)
在使用Selenium和Angular时,在大多数情况下,您可能需要添加一些显式等待,因为DOM元素是由Angular动态创建/修改的。
例如,您可以尝试使用以下代码添加显式等待:
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")
替换为您的元素定位器。
希望这有帮助。
答案 1 :(得分:0)
试试这个:
driver.findElement( By.cssSelector( "a.btn.btn-primary.ng-scope" ) ).getText();
答案 2 :(得分:-1)
试试这个,
driver.findElement(By.className("btn btn-primary ng-scope")).getText();