Javascript 量角器按名称标记获取元素

Javascript 量角器按名称标记获取元素,javascript,selenium,testing,selenium-webdriver,protractor,Javascript,Selenium,Testing,Selenium Webdriver,Protractor,目前我正在使用量角器和Selenium web驱动程序 我有以下问题: 我有一个html页面,我让量角器点击一个按钮。然后弹出一扇窗户。此窗口包含一个名为“Description”的文本框: 浏览器不执行任何操作,但量角器不会抛出错误。文本框中未键入任何文本。不幸的是,名称是识别输入文本框的唯一方法 我做错了什么?有时,如果该元素在iframe中,则必须切换到该iframe。只需检查是否有iframe或modal可用 否则,您的代码似乎是正确的。量角器中有一个内置的提示处理程序,您可以在其中识别

目前我正在使用量角器和Selenium web驱动程序

我有以下问题:

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

浏览器不执行任何操作,但量角器不会抛出错误。文本框中未键入任何文本。不幸的是,名称是识别输入文本框的唯一方法


我做错了什么?

有时,如果该元素在iframe中,则必须切换到该iframe。只需检查是否有iframe或modal可用


否则,您的代码似乎是正确的。

量角器中有一个内置的提示处理程序,您可以在其中识别它,然后将数据发送到所需的输入字段中。这是怎么做的-

browser.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.driver.switchTo().alert().sendKeys('rabbababab');
如果有许多提示,则可以使用窗口句柄函数切换到所需的提示。这是怎么做的-

browser.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");
    });
});

希望有帮助。

好了,伙计们,我发现了问题所在

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


问题解决了

直接按名称选择也有效:

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

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

  • 右键单击对象
  • 单击Inspect元素
  • 按CTRL+F组合键
  • 键入[name=“Description”]并查看找到多少结果

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

  • $('[name="Description"]')
    
    如果找到多个,则可以尝试以下操作: 1.在向字段发送密钥之前,请尝试单击该字段

    二,

    三,。 在向其发送密钥之前,可以尝试放置以下行: browser.waitForAngular();//等待angular应用程序加载

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

    试着用这个, $('input[name=Description]').sendKeys(“rabbabababab”); 或
    元素(by.css('input[name=Description]')).sendKeys(“rabbababab”)

    根据给出的信息,没有问题,代码应该可以工作,对我来说,选择元素by
    “[name=”””
    语法在量角器中工作。您可以使用promise并使用自定义回调函数来检查DOM元素是否已找到绑定。嘿,谢谢你的回答。由于我的弹出窗口包含许多输入框,有没有办法识别它们?像browser.Alert.txt[“name”].sendKeys(“”;?)??对于
    Alert
    对象,我认为没有任何类似的选项。但是,您可以使用
    switchTo()
    函数和
    getAllWindowHandles()
    来执行此操作。更新了答案。嗯,不知怎的,这似乎不是一个警报()。原因量角器显示“无警报窗口”。。。这更像是一个对话。。。。这很奇怪,因为当我检查对象时,它是一个div,所以量角器应该能识别它…@AdrianMelzer使用
    getAllWindowHandles()
    帮助识别弹出窗口来执行
    switchTo()
    window操作?或者它也给出了一个错误?你能补充一些解释来更好地理解答案吗?谢谢
    // This will search for the element of input with the name="Description" attribute
    $('input[name="Description"]').sendKeys('rabbababab');