使用Selenium查找包含href内部类的HTML元素

时间:2016-11-09 21:07:50

标签: java jquery html selenium

我的页面中有一个元素如下。如何使用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)

3 个答案:

答案 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();