故事:
在StackOverflow上,我看到用户报告他们无法通过selenium WebDriver"click"命令单击一个元素,并且可以通过执行脚本单击JavaScript来解决它.
Python中的示例:
element = driver.find_element_by_id("myid")
driver.execute_script("arguments[0].click();", element)
Run Code Online (Sandbox Code Playgroud)
WebDriverJS/Protractor中的示例:
var elm = $("#myid");
browser.executeScript("arguments[0].click();", elm.getWebElement());
Run Code Online (Sandbox Code Playgroud)
问题:
为什么在常规WebDriver点击时没有点击"通过JavaScript"?究竟是什么时候发生这种变通方法的缺点(如果有的话)?
我个人使用这种解决方法而没有完全理解为什么我必须这样做以及它可能导致什么问题.
嗨,我在使用基本量角器测试时遇到一些麻烦.
我的设置:
量角器conf.json:
"use strict";
exports.config = {
specs: '../E2ETests/**/*.js',
chromeOnly: true,
getPageTimeout: 30000,
allScriptsTimeout: 30000
}
Run Code Online (Sandbox Code Playgroud)考试:
"use strict";
describe('When clicking should add stuff', function () {
var ptor;
beforeEach(function () {
browser.get('https://localhost/myApp');
ptor = protractor.getInstance();
});
it('add stuff', function () {
// If I comment this, the test pass.
element(by.id('add-stuff-button')).click();
// This does not matter fails on the line above..
expect(browser.getTitle()).toBeDefined();
});
});
Run Code Online (Sandbox Code Playgroud)
错误:
UnknownError: unknown error: Element is not clickable at point (720, 881). …Run Code Online (Sandbox Code Playgroud) 我收到一个错误,我试图点击的元素不是点击,我相信不是真的.
我的错误看起来:
1) Open VehiclePage and populate data Populate vehicle data
Message:
UnknownError: unknown error: Element is not clickable at point (1315, 371). Other element would receive the click: <div class="form-con
rol combo-options ng-scope ng-animate ng-leave ng-leave-active" ng-if="comboBox.visible" on-click-outside="comboBox.hide">...</div>
(Session info: chrome=39.0.2171.71)
(Driver info: chromedriver=2.13.307647 (5a7d0541ebc58e69994a6fb2ed930f45261f3c29),platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server
did not provide any stacktrace information)
ommand duration or timeout: 30 milliseconds
Run Code Online (Sandbox Code Playgroud)
我的部分代码:
it('Populate vehicle data', function() {
browser.waitForAngular();
element(by.css('div#datepicking i.glyphicon-calendar')).click();
element(by.css('div#datepicking button[ng-click="select(\'today\')"]')).click();
element(by.model('case.vehicle.adminData.paintColour')).sendKeys(browser.params.paintColour);
element(by.xpath('(//*[@id="form-mileage"])')).sendKeys(browser.params.mileage);
element(by.id('form-mileage-unit')).click().then(function() { …Run Code Online (Sandbox Code Playgroud) 在 testcafe 测试中,我如何点击一个清晰可点击的元素(t.debug()我可以点击该元素)并且不使用ClientFunction或t.eval- 在 testcafe 的 github 问题中推荐的这些“解决方法”不起作用。
一些额外的考虑:
Selector被验证为正确的(我尝试了各种类型的选择)t.wait在选择之前和之后尝试了不同的时间,然后单击<button>to<div>等)我正在尝试使用Protractor和Appium在iPad模拟器中使用茉莉花框架对AngularJS网站进行自动化测试,sendkeys()功能正在用于用户名和密码,但是当我点击登录按钮时,测试通过,但操作不是完成:没有重定向到主页,并且没有为登录按钮显示单击效果,我确定该元素位置正确!因为当我希望gettext()等于"LOGIN"时,它会被传递但是没有重定向,即使我把browser.sleep(8000);
我的测试脚本放在这里:
"use strict";
require("jasmine-expect");
var wd = require("wd");
describe('my app', function() {
it('should make the login test',function() {
// browser.ignoresynchronization=true;
browser.get("http://10.0.22.82:8080/jws/fetablet");
expect(browser.getCurrentUrl()).toEqual(("http://10.0.22.82:8080/jws/fetablet/#/login"));
element(by.model('credentials.username')).sendKeys('RET02').then(function(){
element(by.model('credentials.password')).sendKeys('RET02').then(function(){
element(by.css('.login-button')).click().then(function(){
browser.sleep(8000); expect(browser.getCurrentUrl()).not.toEqual("http://10.0.22.82:8080/jws/fetablet/#/login");
});
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以正确找到点击按钮吗?这是我的HTML代码:
??<div class="lo??gin_lang"> <md-button class="lang_button" ng-click="changeLang()">{{lang}}</md-button> </div>
<div layout="column" flex layout-align="center center" class="md-padding splash-background"> <div class="login-logo"> <img src="{{logoSrc}}"> </div> <form class="login-form" name="loginForm" ng-submit="login()">
<fieldset> <md-input-container class="md-block">
<label translate="login.USERNAME" ng-class="{'floating-label-rtl':dir==='rtl'}"
class="login-label">Username</label>
<input required ng-model="credentials.username" ng-focus="onFocus()" type="text">
<div ng-messages="loginForm.credentials.username.$error" ng-show="loginForm.credentials.username.$dirty">
<div ng-message="required" trans
??late="login.MESSAGE_REQUIRED">This is required.</div> …Run Code Online (Sandbox Code Playgroud) 我试图点击我页面上的上传文件链接,但我说上传链接不可见.我试过将鼠标悬停在链接和下面的代码上.这对我来说很容易修复,所以我真的很困惑如何点击这个链接.我尝试过的:
var EC = protractor.ExpectedConditions;
var uploadLink = element(by.model('roomPlanCtrl.mm2010File'));
browser.wait(EC.elementToBeClickable(uploadLink), 10000);
uploadLink.click();Run Code Online (Sandbox Code Playgroud)
HTML:
<span class="dg-link ng-untouched ng-valid ng-dirty ng-valid-parse" ngf-select="" ng-model="roomPlanCtrl.mm2010File" accept=".mms" ng-hide="roomPlanCtrl.hideImportLinks">Upload a MeetingMatrix 2010 File</span>Run Code Online (Sandbox Code Playgroud)
protractor ×5
angularjs ×4
javascript ×4
end-to-end ×2
selenium ×2
testing ×2
appium ×1
automation ×1
jasmine ×1
python ×1
testcafe ×1