天道酬勤,学无止境

量角器:通过属性值查找隐藏的输入元素(Protractor: find hidden input element by attribute value)

问题

我如何定位和获取如下元素的值?

<input type="hidden" title="username" value="joe.doe">

任何建议非常感谢。

回答1
var userNameElm = $('input[title=username]');

it('is present but invisible', function() {
    expect(userNameElm.isPresent()).toBeTruthy();
    expect(userNameElm.isDisplayed()).toBeFalsy();
});

it('should have proper value attribute', function() {
    expect(userNameElm.getAttribute('value')).toEqual('joe.doe');
});
回答2

如果您尝试访问具有data-*属性的元素,就像我们在Bootstrap所做的那样,我们可以选择这样的元素,如下所示:-

var loginBtn = $('a[data-target="#login-modal"]');

这与接受的答案相同,只是它在#login-modal周围有"" 。 没有"" ,它不起作用。

祝你好运。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用量角器和硒将文件上传到隐藏的输入(Upload file to hidden input using protractor and selenium)
    问题 我有一个隐藏的文件输入字段,如下所示: <input type="file" id="fileToUpload-1827" multiple="" onchange="angular.element(this).scope().setFiles(this)" data-upload-id="1827" class="hidden-uploader"> 我希望能够将文件上传到此文件。 在量角器中执行此操作的正常方法是: ptor.findElement(protractor.By.css('.file-upload-form input')).sendKeys('/path/to/file') 但是因为输入元素不可见,所以出现错误。 我试过了: ptor.driver.executeScript("return $('.file-upload-form input')[0].removeClass('hidden-uploader');").then(function () { ptor.findElement(protractor.By.css('.file-upload-form input')).sendKeys('hello'); }) 但是得到了错误 UnknownError: $(...)[0].removeClass is not a function
  • 单击量角器端到端测试中隐藏元素的方法(A way of clicking on hidden elements in protractor end to end tests)
    问题 有没有一种方法可以单击子菜单中的隐藏值。 我希望能够做类似的事情 driver.findElement(protractor.By.xpath('/html/body/div/div/a')).mouseover.then(function() { ptor.findElement(protractor.By.className('name').getText().then(function(result) { expect(result).toBe('Me'); }); }); 当菜单项不可见时,或者我们目前受限于此。 如果无法做到这一点,那么目前有办法解决这个问题。 回答1 好吧,经过漫长而痛苦的搜索,试图找到这个问题的答案之后,我终于遇到了试图回答另一个问题的答案。 我找到的大多数文档都说明了我们必须以WebElement的形式使用Actions,然后将其强制转换为Javascript,并通过带有click action的数组形式将脚本元素传递给Javascript。 好吧,这里有相同的种类,但有一些修改。 describe('', function() { var ptor = protractor.getInstance(); var driver = ptor.driver; it('', function() { var hiddenElement =
  • 如何在angularjs e2e量角器测试中上传文件(How to upload file in angularjs e2e protractor testing)
    问题 我想使用angularjs e2e测试来测试文件上传。 您如何在e2e测试中做到这一点? 我通过咕unt的业力运行测试脚本。 回答1 这是我的方法: var path = require('path'); it('should upload a file', function() { var fileToUpload = '../some/path/foo.txt', absolutePath = path.resolve(__dirname, fileToUpload); element(by.css('input[type="file"]')).sendKeys(absolutePath); element(by.id('uploadButton')).click(); }); 使用path模块来解析您要上传的文件的完整路径。 将路径设置为输入type =“ file”元素。 点击上传按钮。 这不适用于Firefox。 由于该元素不可见,量角器将抱怨。 要在Firefox中上传,您需要使输入可见。 这就是我要做的: browser.executeAsyncScript(function(callback) { // You can use any other selector document.querySelectorAll('#input-file-element')
  • 如何向量角器全局添加自定义定位器?(How to globally add a custom locator to Protractor?)
    问题 我为量角器编写了一个自定义定位器,该定位器通过其ui-sref值查找anchor元素。 在我的规范中,我只是使用by.addLocator来添加自定义定位器,但是我发现发布并让其他人使用它可能是一件很酷的事情。 目标是将此自定义定位器添加到全局Protractor对象,以便可以在您的任何规格中使用。 我最初的方法是在量角器配置的onPrepare块中添加此功能。 类似于下面的伪代码: onPrepare: function () { require('ui-sref-locator')(protractor); // The protractor object is available here. } 该require语句将执行以下功能: function (ptorInstance) { ptorInstance.by.addLocator('uiSref', function (toState, opt_parentElement) { var using = opt_parentElement || document; var possibleAnchors = using.querySelectorAll('a[ui-sref="' + toState +'"]'); var result = undefined; if (possibleAnchors.length
  • 无法点击量角器中的隐藏元素?(请仔细查看图片。)(Not able to click on hidden element in protractor?(Please go through the image.))
    问题 这是 HTML 代码: <li class="subdropdown"> <a href="" class="submenu-toggle">Create Position</a> <ul class="list-unstyled dropdown-submenu" role="menu"> <li style="cursor: pointer;"> <a ng-click="openPositionModal($event)"><i class="glyphicon glyphicon-list-alt"></i> New Position</a> </li> 这是我的测试用例: 1) Move the cursor on "Create position" toggle menu. 2) After the mouse hover, click on the "New position" menu list. 回答1 browser.actions()、“通过链接文本”和“通过部分链接文本”定位器在这里应该有所帮助: var EC = protractor.ExpectedConditions; // open up the menu // choose position var choosePosition = element(by.linkText('Create
  • 量角器:按属性查找元素(Protractor: Find Element by Attribute)
    问题 我需要找到以下元素进行测试: <div class="alert alert-danger" role="alert" ng-show="notValid">Zugangsdaten eingeben</div> 我怎样才能找到这个元素来检查可见性(ng-show)? ng-show 属性和值是唯一标识元素的唯一属性和值。 该类用于许多元素... 我正在寻找类似的东西: var notValid = element(by.Attribute('ng-show', 'notValid'); 回答1 你可以通过 .css() 找到它: element(by.css('div[ng-show=notValid]')); $('div[ng-show=notValid]'); // shortcut for the above expression 或者,通过.xpath(): element(by.xpath('//div[@ng-show="notValid"]'));
  • 量角器:等待元素变得不可见/隐藏(Protractor : wait for element to become invisible/hidden)
    问题 我看到了其他与量角器相关的文章,其中提到了如何等待某个元素变得可见。 但是,最近,我遇到了相反的用例。 我想等待一个元素,直到它变得不可见。 因为我找不到关于它的任何具体信息。 我继续前进,想出了一个解决方案。 var ptor = protractor.getInstance(); ptor.wait(function() { return element(by.css('#my-css-here')).isDisplayed().then(function(isVisible){ console.log('is visible :' + isVisible); return !isVisible; }); }, 12000).then(function(){ //do whatever you want }); 希望它会有所帮助。 任何建议都值得欢迎。 谢谢, 回答1 使用elementexplorer(https://github.com/angular/protractor/blob/master/docs/debugging.md),我查看了量角器对象,并找到了一个对我而言非常有用的答案: var el = element(by.id('visibleElementId')); browser.driver.wait(protractor.until
  • 如何在量角器的输入上获取文本(How to getText on an input in protractor)
    问题 在量角器的文档中,我看到以下示例: describe('by model', function() { it('should find an element by text input model', function() { var username = element(by.model('username')); username.clear(); username.sendKeys('Jane Doe'); var name = element(by.binding('username')); expect(name.getText()).toEqual('Jane Doe'); }); 此处显而易见的是,您可以使用“ by.model”在输入框中设置值,但是如果您要查看输入框并查看其中的内容,则需要使用“ by.binding”。 我有一组代码(摘要)在其中执行: element(by.model('risk.name')).sendKeys('A value'); expect(element(by.model('risk.name')).getText()).toEqual('A value'); (在我的真实代码中,我保存了实体,然后在编辑模式下返回了该实体,并且我正在检查我的值是否已保存。但是它仍然归结为同一件事,并且此示例代码也存在相同的问题)。
  • 如何调试等待异步Angular任务的超时? 无法在角度页面上找到元素(How to debug timed out waiting for asynchronous Angular tasks? Failure to find elements on angular page occurring)
    问题 编辑:请注意,在@ ernst-zwingli的帮助下,我找到了问题的根源,因此,如果您遇到相同的错误,他指出的修复方法之一可能会为您提供帮助。 我的问题是量角器本身的一个已知问题,如果您认为可能是您自己,那么我会扩展我的步骤以在最初提出问题之后指出问题的根源。 我试图在使用angular-cli构建的Angular2(仅Angular)应用程序中使用Protractor。 我的问题:当browser.waitForAngularEnabled的默认设置为true时,找不到Angular应用程序页面上的元素(如“我相信我在一个角度页面上,并且希望量角器做到这一点很神奇”) 。 如果我将browser.waitForAngularEnabled设置为false则会发现它们很好(如“我不在一张有角度的页面上,并且想自己解决这个问题,坐在量角器”) 。 如何在我肯定的Angular页面上找到导致此问题的原因? 我有一个带有非Angular Auth0登录页面的产品,该页面可控制对使用Angular(准确地说是Angular 4.3.2)编写的产品的其余部分的访问。 我已成功遍历非Angular登录页面上的登录。 我将waitForAngularEnabled切换为false以方便非Angular登录。 在单击“提交”按钮后,我希望将其初始登录页面(Angular
  • 量角器通过 div 中的标签查找元素(Protractor find an element by tag inside a div)
    问题 我在 HTML 页面中有一个 div,其名称始终是已知的,并且在该 div 内有一个 href,其详细信息未知。 它可能是父母的直系子女,也可能是进一步的孙子女。 看起来像这样: <div class="divName"> ... <a href="some url">some text</a> ... </div> 我知道这个 div 中只会有一个链接,所以我想找到一个链接并单击它。 我已经尝试了以下但它似乎没有工作: element(by.classname('divName')).find('a').click(); 有任何想法吗? 回答1 element(by.css('.divName a')).click(); 或者更短的符号: $('.divName a').click(); 回答2 想出了一个解决办法: ptor.findElement(protractor.By.className('clsName')) .findElements(protractor.By.tagName('a')) .then(function(links){ links[0].click(); //place expects here, otherwise it will run async and your expects will be hit //before the
  • 量角器:按 Div 文本查找元素(Protractor: Finding Element by Div Text)
    问题 嘿,我的 div 元素之一中有此代码: <div class="col-sm-8">Account Information: </div> 有人能告诉我如何在我的量角器代码中找到这个元素吗? 是否有可能做这样的事情: expect(element(by.divText('Account Information: ')).isDisplayed()).toBe(true); 我有多个类为“col-sm-8”的元素,所以我无法按类找到该元素。 我只是想知道是否有任何方法可以使用 div 元素中的文本找到该元素? 谢谢您的帮助! 回答1 我建议你使用 by.cssContainingText element(by.cssContainingText('.col-sm-8', 'Account Information')) 回答2 没有允许通过文本定位元素的 webdriver 方法。 您可以尝试通过以下方式使用 xpath(未测试): element(by.xpath('//div[contains(text(), "Account Information: ")]') 回答3 请记住by.cssContainingText通过 PARTIAL 文本匹配元素 所以element(by.cssContainingText('div', 'male')
  • 通过变量使用量角器链接元素?(Protractor Chained Elements by Using Variables?)
    问题 我试图使我的pageObjects在量角器中保持尽可能的干净,但是在选择子元素时遇到了某些行为。 这有效: var parent = element(by.css('.parent-class')); parent.element(by.css('.child-class')).getText(); 但是,这不是: var parent = element(by.css('.parent-class')); var child = element(by.css('.child-class')); parent.child.getText(); 是否有办法做类似第二个例子的事情? 我宁愿不要将元素定位器散布在pageObjects的所有方法中,但这似乎是找到子元素的唯一方法? 在实际应用中,我有很长的卡片清单,从中可以筛选出我要寻找的卡片。 然后,我想对卡片的子元素进行处理。 回答1 您可以使用locator()函数来获取子元素的定位符,并使用它来查找父元素的子元素。 这类似于您在注释中提供的解决方案,但是允许您将页面对象上的所有属性定义为Web元素,而不是元素和定位符的混合: var parent = element(by.css('.parent-class')); var child = element(by.css('.child-class')); parent
  • 量角器在转发器中查找元素(Protractor find element inside a repeater)
    问题 以下是我的标记 <tr ng-repeat="post in posts"> <td ng-click="activePost(post)" class="title">{{post.title}}</td> <td><button class="btn btn-danger" ng-click="delete(post)">Delete</button> </td> </tr> 我正在尝试使用title类获取元素。 我用来访问转发器的代码是: postsList = element.all(by.repeater('post in posts')); 有没有一种方法可以通过在jQuery中执行以下操作来获取元素: var titleText = $("tr:first").find(".title").text(); 有没有办法用量角器做类似的事情? 回答1 这应该适合您的示例: element.all(by.repeater('post in posts')).then(function(posts) { var titleElement = posts[0].element(by.className('title')); expect(titleElement.getText()).toEqual('YourEnteredTitle'); }); 回答2
  • 带有量角器 js 的剪贴板中的文本(Text in clipboard with protractor js)
    问题 如何使用量角器复制特定文本? 我想使用以下命令加载要粘贴的文本: return browser.actions().sendKeys(Keys.CONTROL, 'v').perform(); 样本 : 加载我的文本“test”,然后使用此命令粘贴“test” 我想在剪贴板中放一段文字 回答1 我可以直接在我的 ng-model 中放置一个值,而不是使用 sendKeys 吗? 是的,您可以通过 .evaluate() 直接设置model值: var elm = element(by.model("mymodel.field")); elm.evaluate("mymodel.field = 'test';"); 将文本放入剪贴板 这个想法是使用现有的或动态创建一个input元素,您可以将文本发送到其中,选择输入中的所有文本并使用CTRL/COMMAND + C快捷方式复制它。 样本: var textToBeCopied = "my text"; // creating a new input element browser.executeScript(function () { var el = document.createElement('input'); el.setAttribute('id', 'customInput'); document
  • 使用 Protractor 设置 Angular 模型(Setting an Angular model using Protractor)
    问题 我正在尝试使用量角器在我的网站上模拟用户故事。 用户必须输入使用自动完成功能的输入。 在现实生活中,用户必须在输入中输入一些文本,然后使用鼠标或更自然地使用向下箭头键选择正确的命题。 问题是我似乎无法用量角器模拟它。 element.sendKeys 只是不允许你这样做。 我尝试了十几种不同的方式,最多只能产生不可预测的结果。 所以我想直接操纵我输入的 ng-model。 有没有办法从量角器访问元素的范围并在其上调用函数/设置属性? 这是我的问题的简化版本: 看法 : <div ng-controller="MyController"> <input id="my-input" ng-model="myModel"/> </div> 控制器 : myModule.controller('MyController', ['$scope', function($scope){ $scope.myModel = ""; //[...] }]); e2e量角器测试: describe("setting myModel to a fixture value", function(){ it("should set myModel to 'a test value'", function(){ var myInput = element('my-input'); // Now what
  • 如何使用Selenium / Protractor设置HTML5 type =“ date”输入字段(例如,在Chrome中)?(How to set HTML5 type=“date” input fields (e.g. in Chrome) using Selenium/Protractor?)
    问题 我想更新一些HTML5日期表单字段的日期值(显示为mm / dd / yyyy,仅可修改数字部分): <input type="date"/> 在我的硒/量角器测试中。 我已经尝试过为此使用sendKeys ,但到目前为止(在Chrome上)尚未成功。 有没有办法使用sendKeys做到这sendKeys ? 还是其他方法可以做到? 回答1 在Mac上使用带有Protractor的Mac上的Chrome,以下方法对我有效。 范本(html5) <input type="date" placeholder="Due Date" ng-model="newLesson.dueDate"> 测试 this.newLessonDate = element( by.model('newLesson.dueDate') ); this.newLessonDate.sendKeys('01-30-2015'); 在输入日期格式为“ 01-30-2015”之前,我一直收到错误消息。 回答2 目前看来,最好的方法是在不触摸用户界面表示的情况下更新输入字段。 对于普通的Selenium,此方法似乎可以工作(随着UI更新以匹配): selenium.executeScript('document.getElementById("continuousFrom").value = "2050-01
  • 量角器在 AngularJS 之外的可用性(Usability of Protractor outside of AngularJS)
    问题 所以我最近从使用 AngularJS 切换到 ReactJS,但我确实很喜欢使用 Protractor E2E 测试运行器,所以我想知道关于 Protractor 的两件事。 在完全不使用 AngularJS 的网站上使用量角器有什么重大问题吗? 我知道 Protractor 默认情况下会尝试与 Angular 同步,您会得到: Error: Angular could not be found on the page X : retries looking for angular exceeded 但是我相信可以通过在browser.get()之前执行browser.ignoreSynchronization = true来防止输入消息。 除此之外还有其他问题吗? 另一个问题是 Protractor 是否会成为特定于 AngularJS 的,因为它只能测试 AngularJS 代码? 我认为可以绕过任何 AngularJS 特定功能(就像使用browser.ignoreSynchronization = true ),我只是想确保这是 Protractor 前进的核心目标。 回答1 尽管 Protractor 旨在为 Angular 应用程序编写端到端的测试代码,但它仍然可以用于测试非 Angular 应用程序。 有两种常见的解决方案可以实现这一点: 直接访问包装好的
  • 量角器测试:如何在登录表单中设置文本元素的值?(Protractor testing: How to set the value of text elements in a login form?)
    问题 我正在用Protractor为Angular应用程序编写测试。 我想填写一个登录表格并提交。 我怎样才能做到这一点? 到目前为止,我还不知道如何设置电子邮件和密码字段的值。 describe('The dashboard', function() { ptor = protractor.getInstance(); beforeEach(function() { ptor.get('#/dashboard'); var email = ptor.findElement(protractor.By.model('email')); var password = ptor.findElement(protractor.By.model('password')); var submit = ptor.findElement(protractor.By.tagName('button')); // Fill out the form? submit.click(); }); it('has a heading', function() { heading = ptor.findElement(protractor.By.tagName('h1')); expect(heading.getText()).toEqual('My Dashboard'); }); }); 回答1
  • 量角器等待 isElementPresent 并单击等待的元素失败(Protractor wait for isElementPresent and click on waited element fails)
    问题 我的 end2end 测试有问题。 有时他们通过没有任何问题,但三分之二的时间他们失败了。 我使用带有以下代码的量角器: describe('Admin dashboard delete Exports', function () { it('create export', function () { browser.get(e2GUrl + '/admin/studies'); ptor.wait(function() { return ptor.isElementPresent(by.id('export')); }, 5000, 'wait for study list page to be loaded.'); element(by.id('export')).click(); }); HTML(请注意,此元素是可见的,不会被ng-if或ng-show隐藏): <ul> <li data-ng-repeat="study in studies"> <div data-ng-controller="ExportController" class="btn-group"> <a id="export" class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#"> <i class="fw
  • 等待量角器通过基本量角器测试与页面同步时遇到错误(Running into Error while waiting for Protractor to sync with the page with basic protractor test)
    问题 describe('my homepage', function() { var ptor = protractor.getInstance(); beforeEach(function(){ // ptor.ignoreSynchronization = true; ptor.get('http://localhost/myApp/home.html'); // ptor.sleep(5000); }) describe('login', function(){ var email = element.all(protractor.By.id('email')) , pass = ptor.findElement(protractor.By.id('password')) , loginBtn = ptor.findElement(protractor.By.css('#login button')) ; it('should input and login', function(){ // email.then(function(obj){ // console.log('email', obj) // }) email.sendKeys('josephine@hotmail.com'); pass.sendKeys('shakalakabam'); loginBtn