【问题标题】:protractor get element by name tag量角器通过名称标签获取元素
【发布时间】:2015-10-07 10:06:21
【问题描述】:

目前我正在使用量角器和 Selenium web Driver。

我有以下问题:

我有一个 html 页面,我让量角器单击一个按钮。然后弹出一个窗口。此窗口包含一个名称为“描述”的文本框:

<input type="Text" name="Description" ... />

现在当我尝试以下操作时:

element(by.css('[name="Description"]')).sendKeys("rabbababab");

浏览器什么都不做,但量角器不会抛出错误。没有文本输入到文本框中。不幸的是,名称是识别输入文本框的唯一方法。

我做错了什么?

【问题讨论】:

  • 根据给出的信息没有问题并且代码应该可以工作,对我来说,通过"[name='']" 语法选择元素在量角器中有效。您可以使用 promise 并放置一个自定义回调函数来检查 DOM 元素是否已绑定找到。 angular.github.io/protractor/#/…

标签: javascript selenium testing selenium-webdriver protractor


【解决方案1】:

直接按名称选择也可以:

element(by.name('Description')).sendKeys("rabbababab");

【讨论】:

    【解决方案2】:

    好的,伙计们,我找到了问题所在。

    它不是警报,它只是一个 div,并且所有其他控件都被锁定以供用户输入。但是对话框覆盖了一个文本框,它具有相同的 css 属性。所以量角器只是写入覆盖的文本框,我看不到它......

    问题解决了

    【讨论】:

      【解决方案3】:

      有时如果该元素在 iframe 内,那么您必须切换到该 iframe。只需检查是否有任何 iframe 或 modal 可用?

      否则你的代码看起来是正确的。

      【讨论】:

        【解决方案4】:

        量角器中有一个内置的提示处理程序,您可以在其中识别它,然后将数据发送到您想要的输入字段。方法如下-

        browser.Alert.sendKeys("rabbababab");
        

        注意:弹出窗口应该有一个输入,它可以接受一些数据,否则你的命令将失败。

        如果上述解决方案不起作用,请尝试通过切换到弹出窗口来发送数据,然后向其发送文本。方法如下 -

        browser.driver.switchTo().alert().sendKeys('rabbababab');
        

        如果有很多提示,那么您可以使用窗口句柄功能切换到您想要的提示。方法如下-

        browser.getAllWindowHandles().then(function(handles){
            browser.switchTo().window(handles[1]).then(function(){ //change the array index based on your pop-up's count
                element(by.css('[name="Description"]')).sendKeys("rabbababab");
            });
        });
        

        希望对你有帮助。

        【讨论】:

        • 您好,谢谢您的回答。由于我的弹出窗口包含许多输入框,有没有办法识别它们?像 browser.Alert.txt["name"].sendKeys(""); ??
        • 对于Alert 对象,我认为没有这种选择。但是,您可以使用switchTo() 函数和getAllWindowHandles() 来实现。用它更新答案。
        • 嗯,不知何故,这似乎不是警报()。因为量角器说“没有警报窗口”......它更像是一个对话框......它很奇怪,因为当我检查对象时它是一个 div,所以量角器应该识别它......
        • @AdrianMelzer 使用getAllWindowHandles()switchTo() 窗口有助于识别您的弹出窗口吗?还是它也会出错?
        【解决方案5】:

        也许您的应用程序中有多个具有 name="Description" 的对象。 您可以在 Chrome 中找到它:

        1. 右键单击对象
        2. 点击检查元素
        3. 按 CTRL+F
        4. 键入 [name="Description"] 并查看它找到了多少结果。

          元素(by.css('[name="Description"]'))

        一样
        $('[name="Description"]')
        

        如果您发现不止一个,那么您可以尝试以下方法: 1. 在向其发送密钥之前尝试单击该字段

        2.

        // This will search for the element of input with the name="Description" attribute
        $('input[name="Description"]').sendKeys('rabbababab');
        

        3。 在向其发送密钥之前,您可以尝试输入以下行: browser.waitForAngular(); // 等待 Angular 应用加载

        让我们知道它是如何工作的。

        【讨论】:

          【解决方案6】:

          尝试使用这个, $('input [name=Description]').sendKeys("rabbababab"); 或者 element(by.css('input [name=Description]')).sendKeys("rabbababab");

          【讨论】:

          • 能否请您添加一些解释来回答以便更好地理解?谢谢!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-07
          • 1970-01-01
          相关资源
          最近更新 更多