【问题标题】:Unable to locate element (username and password) in selenium webdriver无法在 selenium webdriver 中找到元素(用户名和密码)
【发布时间】:2016-11-25 20:50:49
【问题描述】:

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

您的帮助将不胜感激。

【问题讨论】:

  • 您的 HTML 似乎错过了关闭
    并且中间有未关闭的
  • @girlfacs,你能得到什么错误信息吗?
  • 这是在 IFrame 中吗?

标签: java selenium webdriver selenium-webdriver


【解决方案1】:

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

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

对不起我的英语。

【讨论】:

  • 感谢您的回复。
【解决方案2】:

请尝试将 xpath 更改为

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 检查了 IDE,但那里使用的语法/格式在 webdriver 中不起作用。无论如何感谢您的回复
    【解决方案4】:

    用户名和密码元素本身没有用于区分它们的属性,因为它们具有相同的 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']
    

    附:在 firefox 中使用 Firepath 验证的所有定位器。

    【讨论】:

    • 感谢您的回复。这有帮助
    【解决方案5】:

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

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

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

    username.click();
    

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

    【讨论】:

    • 感谢您的回复。试过 by.id("username") 但也没有用。
    【解决方案6】:

    你写的方式不对。

    WebElement username = driver.findElement("username')
    

    试试这个:

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 2015-05-04
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多