【发布时间】:2019-03-25 07:02:55
【问题描述】:
这是一个带有 AngularJS ng-click 属性的 div,该属性会在单击 div 时设置一个变量。
<div id="id"
ng-click="foo.bar = true;">
Set bar variable on foo object to true
</div>
这是一些使用 Selenium 来点击 div 元素的 Java 代码。
By upload = By.id("id");
driver.findElement(uploadCensus).click();
当我运行 Java 代码时,AngularJS 会永远挂起。我认为单击 div 时未设置 foo.bar 所以这里有一些直接设置变量的代码。
By upload = By.id("id");
((JavascriptExecutor) driver)
.executeScript("foo.bar = true;",
driver.findElement(upload));
堆栈跟踪
未知错误:未定义 foo(会话信息:chrome=56.0.2924.87) (驱动信息:chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),平台=Windows NT 6.1.7601 SP1 x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:51 毫秒 构建信息:版本:'2.53.0',修订:'35ae25b',时间:'2016-03-15 17:00:58' 系统信息:主机:'WV-VC104-027',ip:'{ip}',os.name: 'Windows 7',os.arch:'amd64',os.version:'6.1',java.version: '1.8.0_151' 驱动程序信息:org.openqa.selenium.chrome.ChromeDriver 功能 [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false,networkConnectionEnabled=false, 铬={铬驱动程序版本=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed), userDataDir=C:\Users{user}\AppData\Local\Temp\scoped_dir5600_4225}, 需要HeapSnapshot=true,pageLoadStrategy=正常, databaseEnabled=false,handlesAlerts=true,hasTouchScreen=false, 版本=56.0.2924.87,平台=XP,browserConnectionEnabled=false, nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true, webStorageEnabled=true,browserName=chrome,takeScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 会话 ID: a7734312eff62fe452a53895b221a58d
当我尝试设置 foo.bar 时,我无法获得对变量的引用,因为它不是全局定义的,并且隐藏在 AngularJS 源代码中的某个地方。我试图取消索引并寻找变量,但我似乎找不到它。我想通过JavascriptExecutor 手动设置foo.bar 变量,但无法获得对该变量的引用。我将如何找到然后设置变量?
如果这似乎是触发ng-click 的错误方式,我愿意接受想法。我确信 Protractor 有办法处理这个问题,但是这个 AngularJS 应用程序部署在企业环境中,并且几个月来一直试图让业务方批准这项技术。我被硒困住了。帮助...
【问题讨论】:
-
您在使用
JS执行器时会出现什么错误? -
@demouser123 已编辑;大声笑我忘记了堆栈跟踪。
标签: javascript java angularjs selenium