无法在selenium webdriver中找到元素(用户名和密码)

时间:2013-07-30 01:51:26

标签: java selenium webdriver selenium-webdriver

我似乎无法弄清楚这一点。我尝试过使用xpath,cssselector和executeScript但没有运气。我正在尝试访问用户名和密码,但我的代码找不到它。

我是webdriver和jquery的新手

我试过的事情的子集。所有这些都找到'登录'但不是用户名或密码

WebElement username = driver.findElement("username')
WebElement username = driver.findElement(By.xpath("//div[@class='forms']//descendant::input[@name='username']"));
js.executeScript("$('div.input').get(0)");

我在xpath,cssselector中尝试了几个正则表达式。

<div class="forms">
    <form name="formLogin" method="post" action="">
        <div>Please sign in:</div>
        <div style="height:5px"> </div>
        <ul>
            <li class="nameField">
                <div>
                    <input class="hint_color" type="text" style="display: none;" value="" tabindex="1">
                    <input id="username" type="text" tabindex="1" title="USER.NAME" value="username"       name="username" autocomplete="off">
                </div>
                <div style="height:5px;"> </div>
                <div>
            </li>
            <li class="pwdField">
                <div>
                    <input class="hint_color" type="text" style="display: none;" value="" tabindex="2">
                    <input id="username" type="password" title="PASSWORD" tabindex="2" value="password" name="username" autocomplete="off">
                </div>
                <div style="height:5px"> </div>
                <div>
                    <div style="height:5px"> </div>
                    <a href="">Forgot Username/Password</a>
                </div>
            </li>
            <li class="submitField">
                <input id="login" type="submit" value="Log In" name="login">
            </li>
        </ul>
    </form>

我们将不胜感激。

6 个答案:

答案 0 :(得分:1)

在您的HTML代码中,您有两个标签id = username和两个标签name = username。那是错的,webdriver无法区分这些元素。

所以,如果可以,请更改这些ID(id =用户名// id =密码),但如果你不能这样做, 使用Selenium IDE记录脚本并尝试使用XPATH查找这些元素。

对不起我的英语。

答案 1 :(得分:1)

请尝试将xpath更改为

Option:1 //div[@class='forms']//descendant::input[@value='username']

Option 2: //input[@value='username']

答案 2 :(得分:0)

要对定位器,其类型以及如何以不同方式选择相同定位器进行便捷操作,您应该先使用Selenium BuilderSelenium IDE (firefox Addon)

记录您想要的事件,使用目标下拉列表下的可用方式更改定位器。这将帮助您找到确切的定位器。我希望通过这种方式,你可以弄清楚你错过了什么。

答案 3 :(得分:0)

这是什么? 对于这两个字段(用户名密码),元素idname仅为username。如果这是错误的,您可以尝试以下命令:

WebElement username = driver.findElement(By.id("username"));

无论您想要执行什么操作,都可以执行以下操作:

username.click();

username.sendKeys("abc@gmail.com");

答案 4 :(得分:0)

用于区分它们的用户名和密码元素本身没有属性,因为它们具有相同的ID和相同的类。这是糟糕的HTML编码;但即便如此,也可以解决此问题,因为li元素具有不同的类nameFieldpwdField。最简洁有效的方法是使用CSS选择器:

li.nameField input#username
li.pwdField input#username

使用这些定位器,webdriver代码为:

WebElement username = driver.findElement(By.cssSelector("li.nameField input#username"));
WebElement password = driver.findElement(By.cssSelector("li.pwdField input#username"));

或者如果您愿意,可以使用XPath等价物:

.//li[@class='nameField']//input[@id='username']
.//li[@class='pwdField']//input[@id='username']

P.S。所有定位器都在firefox中使用Firepath验证。

答案 5 :(得分:0)

方式,你写的是错的。

WebElement username = driver.findElement("username')

而不是试试这个:

WebElement username = driver.findElement(By.cssSelector(".nameField>div>input[id='username']"));
username.sendKeys("abcdefg");

您可以为CssSelector定位器编写多个"username"。 完成xpath或CssSelector后,请使用FirePath交叉检查您的定位器。