【问题标题】:org.openqa.selenium.NoSuchElementException Cannot find textbox element.org.openqa.selenium.NoSuchElementException 找不到文本框元素。
【发布时间】:2017-01-03 19:33:33
【问题描述】:

我搜索了堆栈溢出,虽然有“org.openqa.selenium.NoSuchElementException: Unable to locate element”的答案,但它们似乎不适合我的情况。我对编码和使用硒非常陌生。所以你能提供的任何帮助都会很棒。先感谢您。

当我找到一个元素是用户名文本框时,我收到了这个错误。

当我使用 firepath 检查元素时,我得到以下信息;

input id="txt_658_4692" class="form-control ggo-field" required="1" data-bv-notempty-message="该字段为必填项。" data-bv-stringlength-message="要删除的 255 个字符。" data-fv-stringlength="true" maxlength="255" data-ggo-maxlength="255" name="txt_658_4692" data-ggo-fieldtype="TEXT" data-ggo-fieldidentifier="APPLICANT_USERNAME" data-ggo- token="de6cbe2fe346a847ab301bd6147c0374" value="" type="text"/

所以在那一串疯狂的地方应该是我可以定位然后发送密钥登录的元素。

我尝试过使用

driver.findElement(By.Id())
driver.findElement(By.xpath())
driver.findElement(By.cssSelector())
driver.findElement(By.name())

这是我遇到错误的代码部分

WebElement usernameTextbox = driver.findElement(By.xpath(".//*[@id='txt_658_4692']"));
    usernameTextbox.sendKeys("russelltest1");

任何帮助或建议都会很棒。

谢谢。

【问题讨论】:

    标签: selenium-webdriver


    【解决方案1】:

    当 webdriver 在 DOM 中找不到元素时抛出 NoSuchElementException。我假设您的文本框元素 id 可能会动态更改,因此此 xpath 查询无法选择它,因为它不再存在。 尝试使用不同的 xpath 选择器,例如:

    driver.findElement(By.xpath(".//*[data-ggo-fieldidentifier='APPLICANT_USERNAME']"));
    

    看看有没有帮助。

    【讨论】:

    • 我最终用 driver.findElement(By.xpath(".//*[@id='txt_658_4692']"));当我看着控制台时,它一直给我一些接近的东西,但被切断了。只是一个反复试验的问题。感谢您花时间回答我的问题。我很感激。
    【解决方案2】:

    您还可以使用标签文本来识别文本框。例如,如果您的用户名字段标签的文本属性为 User:,您可以使用以下 xpath:

    定位文本框
    //label[text()='User:']/following::input[1]
    

    //*[text()='User:']/following::input[1]
    

    如果它不适合您,请分享页面的完整 HTML,以便我可以告诉您所需文本框的确切路径。

    【讨论】:

    • 我最终用 xpath 得到了它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多