在Selenium(Java)中通过cssSelector获取元素

时间:2014-12-02 06:29:24

标签: java selenium

<html>
    <body>    
        <div id="login-box" class="form-box">    
            <form id="frmlogin" class="form" name="frmlogin" method="post">
                <div class="body">
                    <div class="form-group">
                        <input id="email" class="form-control" type="text" maxlength="50"     value="dfsf@gmail.com" placeholder="Email" name="email">
                        <span class="red">Please provide a valid email address</span>
                    </div>
                    <div class="form-group">
                        <input class="form-control" type="password" maxlength="15" placeholder="Password" name="password">
                        <span class="red">Password must not be empty</span>
                    </div>
                </div>
            </form>
        </div>
    </body>
</html>

我需要得到&#34;请提供有效的电子邮件地址&#34;和&#34;密码不能为空&#34;在nth-child中使用cssSelector

我尝试了以下代码段:

//案例2

    driver.findElement(By.name("email")).clear();
    driver.findElement(By.name("email")).sendKeys("");
    String a=driver.findElement(By.cssSelector("form#frmlogin div.form-group:nth-child(1)>span")).getText();
    System.out.println(a);
    if(a.contains("valid email address"))
    {
        System.out.println("Login test case2 Passed");
    }
    else
    {
        System.out.println("Login test case2 Failed");
    }

结果为NoSuchElementFound

5 个答案:

答案 0 :(得分:3)

您可以按元素选择器

使用它
By.cssSelector("input[name=email]")

答案 1 :(得分:1)

请尝试以下代码:

1-要退回“请提供有效的电子邮件地址”:

String a = driver.findElement(By.cssSelector("form#frmlogin div.form-group:nth-child(1)>span")).getText();
System.out.println(a);

2-返回'密码不能为空':

String a = driver.findElement(By.cssSelector("form#frmlogin div.form-group:nth-child(2)>span")).getText();
System.out.println(a);

答案 2 :(得分:0)

如果你不必要,你也可以使用XPath选择器,在我看来你必须选择第n个元素时更容易使用。试试这个:

对于电子邮件:

By.xpath("//div[@class='form-group'][1]/span")

密码:

By.xpath("//div[@class='form-group'][2]/span")

但您是否也可以提供与您合作的完整HTML页面?也许表单在iframe中,因此Selenium在定位元素时遇到问题

答案 3 :(得分:0)

您需要添加.getText()方法,以便在标记内获取文本。

答案 4 :(得分:-1)

您是否曾尝试object.getAttribute("innerHTML")之类的内容,字面意思是"innerHTML",就像这样?

我在从span标记

获取文本时遇到了类似的问题