【问题标题】:Selenium - How to send input from div > input by id?Selenium - 如何从 div 发送输入 > 按 id 输入?
【发布时间】:2020-01-24 08:14:12
【问题描述】:

所以我遇到了一个问题,我试图在输入字段中输入文本,但我意识到有两个相同的 id 名称相同,我在这里寻求有关如何指定哪个 div 的帮助 ->我想使用的输入。

到目前为止我所做的是:

it('Entering First Name', function (done) {

    browser.driver
        .then(() => browser.wait(EC.visibilityOf(element(by.xpath('//input[@id="pp-cc-first-name-field"]'))), 50000, "Timed out finding 'First Name' element"))
        .then(() => element(by.xpath('//input[@id="pp-cc-first-name-field"]')).sendKeys("hello world")
        .then(() => done());
});

使用这个 HTML

所以我不确定在这种情况下我实际上做错了什么,因为现在它没有输入任何内容并且由于超时而失败。我想向这个特定元素输入任何文本。

编辑!

看起来我不得不切换到 iframe,因为背景上加载了 iframe,这就是我无法在现场实际书写的原因。我不得不使用

browser.switchTo().frame(element(by.xpath("//iframe[@id='cc-integrated-payment-page-frame']")).getWebElement()))

能够在字段内写入。

【问题讨论】:

  • 您能将代码复制到工作示例中吗?图片作为代码示例并不是很有用。它可能是代码的一部分,这并不重要。只需将有问题的元素复制到 js sn-p 或代码示例中即可。
  • @SkorpEN 你是什么意思?我确实有一个 sn-p 代码还是你的意思是别的?
  • U 张贴 html 为 png。有带有代码 sn-p 的图标 []。在那里你可以粘贴 html 和你的 js 代码。您不必提供整个页面,您可以将其缩短为有问题的部分。当我们得到对您有问题的部分代码时,检查仍然会更快。
  • 我不确定我是否正确@SkorpEN,但我确实在图像上方放置了一个代码 sn-p。就在它上面?
  • @SkorpEN 我想我找到了问题所在。这是由于 iFrame。显然我需要切换到 iframe 才能使用 browser.switchTo().frame(element(by.xpath("//iframe[@id='wirecard-integrated-payment-page-frame']")).getWebElement())) 在其中写入

标签: javascript selenium protractor mocha.js chai


【解决方案1】:

你的元素ID不一样,<div>pp-cc-first-name-field值,<input>pp-cc-first-name-field值。 尝试如下修复它:

it('Entering First Name', function (done) {

    browser.driver
        .then(() => browser.wait(EC.visibilityOf(element(by.id('pp-cc-first-name'))), 50000, "Timed out finding 'First Name' element"))
        .then(() => element(by.id('pp-cc-first-name')).sendKeys("hello world")
        .then(() => done());
});

【讨论】:

  • 它似乎仍然没有输入任何内容,即使我明白它是正确的,就像你所做的那样。如果它是一个加载的 iframe 会是一个问题吗?基本上我有一个按钮,我在 3-6 秒后加载字段之前单击它?
  • 如果它是 iframe,则测试将失败并出现异常 NoSuchElementException。如果这是一个公共网站,我可以看看是否可能。
  • 不幸的是,它不是我正在从事的项目,由于安全问题等原因,我无法将其推出。但确实。发生的情况是,如果在 1 分钟内未找到该元素,则我确实有超时等,然后抛出超时。也许有一个功能可以查看它是否真的找到了元素但无法发送密钥? - 如果您对网站有任何疑问,如果需要,我绝对可以告诉您更多信息:)
  • 试试这个:EC.presenceOf(element(by.id('pp-cc-first-name'))) 而不是EC.visibilityOf(element(by.id('pp-cc-first-name'))
  • 好吧,我刚刚测试了它,但它似乎仍然没有做任何事情。不写任何东西,只是抛出超时错误
【解决方案2】:

要在输入字段中输入字符序列,您可以使用以下任一Locator Strategies

  • 使用css_selector

    input#pp-cc-first-name[name='First name'][placeholder='First name']
    
  • 使用xpath

    //input[@id='pp-cc-first-name' and @name='First name'][@placeholder='First name']
    

实际上,您修改后的代码块将是:

it('Entering First Name', function (done) {

    browser.driver
    .then(() => browser.wait(EC.visibilityOf(element(by.xpath('//input[@id="pp-cc-first-name" and @name="First name"][@placeholder="First name"]'))), 10, "Timed out finding 'First Name' element"))
    .then(() => element(by.xpath('//input[@id="pp-cc-first-name" and @name="First name"][@placeholder="First name"]')).sendKeys("hello world")
    .then(() => done());
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多