0

我似乎无法弄清楚这一点。我尝试过使用 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>

您的帮助将不胜感激。

4

6 回答 6

1

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

因此,如果可以,请更改这些 id (id=username // id=password),但如果您不能这样做,请使用 Selenium IDE 记录脚本并尝试使用 XPATH 查找这些元素。

对不起我的英语。

于 2013-07-30T13:54:42.810 回答
1

请尝试将 xpath 更改为

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

Option 2: //input[@value='username']
于 2016-11-25T12:29:52.683 回答
0

为了方便使用定位器、它们的类型以及如何以不同的方式选择相同的定位器,您最初应该使用 Selenium BuilderSelenium IDE (firefox Addon)

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

于 2013-07-30T11:35:57.353 回答
0

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

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

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

username.click();

或者

username.sendKeys("abc@gmail.com");
于 2013-07-31T04:57:47.137 回答
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']

PS 所有定位器在 Firefox 中使用Firepath验证。

于 2013-08-05T10:43:20.023 回答
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

于 2016-08-24T09:23:59.643 回答