我正在使用Selenium WebDriver(Java)和TestNG在我创建的网站上进行一些测试.在这个网站上,我也有JavaScript,在一些函数中,它返回值并通过输出值输出到浏览器控制台console.log().
我想知道Selenium WebDriver是否有一种简单的方法可以访问这些JavaScript信息,因此我可以使用TestNG执行断言.
我对Selenium很新,但我知道你可以这样做:
WebDriver driver = new ChromeDriver();
driver.findElement(By.id("btn")).click();
Run Code Online (Sandbox Code Playgroud)
那么我可以用什么类似的东西WebDriver来阅读网站上的JavaScript?
看起来人们假设我正试图通过Selenium"执行"JavaScript代码.
不是这样的.相反,我正在尝试使用Selenium存储已定义的JavaScript变量.
基本上,我希望Selenium能够获取JavaScript变量的值,将其存储在本地,然后对其进行断言测试.
说我的网站有以下JS代码:
$(document).ready(function() {
var foo = $(#"input-field-val").val();
function returnFoo() {
return foo;
}
});
Run Code Online (Sandbox Code Playgroud)
根据我的阅读和理解,在我单独的Selenium测试文件(Selenium.java)中,我应该可以做这样的事情吗?:
public class Selenium {
WebDriver driver = new FirefoxDriver();
JavascriptExecutor js = (JavascriptExecutor) driver;
@Test
public void testSample() {
driver.get("www.mywebsite.com");
js.executeScript("alert(returnFoo());");
}
}
Run Code Online (Sandbox Code Playgroud)
我做了类似于上面的事情,但没有弹出警报框.相反,我收到一条错误消息:
Exception in thread "main" org.openqa.selenium.WebDriverException: ReferenceError: returnFoo is not defined
Run Code Online (Sandbox Code Playgroud)
当我说JS变量时,我很确定我不明白它意味着什么
不应该是闭包或局部变量的一部分
我也尝试在上面定义一个全局变量,$(document).ready(function()...并且设置在function returnFoo()但仍然不起作用.
我已经移动了两个 …
我正在我的应用程序上使用Devise,并希望创建一个全局API密钥,可以访问任何人的帐户的JSON数据,而无需登录.
例如,假设我的API密钥是1234,我有两个用户创建了两个不同的餐厅.
我打开一个全新的浏览器,没有登录任何东西,我传入我的URL .../restaurants/2.json?api_key=1234,我应该能够访问该餐厅的JSON数据,而无需登录用户2
什么是最好的方法呢?
我已经按照Railscast#352保护API,所以我可以通过传入API密钥来访问JSON的东西,但我必须登录才能看到任何内容.
我应该提一下,我也在使用CanCan作为角色,但不确定在这种情况下是否会扮演任何角色(双关语).
我按照Railscast#350和#352教你如何创建REST API版本以及如何使用API密钥保护它.
这是我的controllers/api/v1/restaurants/restaurants_controller.rb的样子:
module Api
module V1
class RestaurantsController < ApplicationController
before_filter :restrict_access
respond_to :json
def index
respond_with Restaurant.all
end
def show
respond_with Restaurant.find(params[:id])
end
private
def restrict_access
api_key = ApiKey.find_by_access_token(params[:api_key])
head :unauthorized unless api_key
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我application_controller.rb仍然有before_filter :authenticate_user!代码.
我首先在REST API版本控制上遵循Railscast#350并将所有JSON API调用移到/apps/api/v1/...
然后,遵循下面的Steve Jorgensen的解决方案,确保我的API模块继承ActionController::Base …
我安装Hadoop和Pig使用brew install hadoop和brew install pig.
我在这里读到你将收到Unable to load realm info from SCDynamicStore错误信息,除非你添加:
export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"
Run Code Online (Sandbox Code Playgroud)
到你的hadoop-env.sh文件,我有.
但是,当我跑步时hadoop namenode -format,我仍然看到:
java[1548:1703] Unable to load realm info from SCDynamicStore
Run Code Online (Sandbox Code Playgroud)
在产出中.
任何人都知道为什么我还能得到它?
我在Android JUnit测试中使用MockWebServer库.我正在测试一个调用服务器的SDK.所以我正在使用MockWebServer覆盖这些服务器URL并捕获SDK发送的内容以对其进行断言.
我遇到的问题是,如果我尝试server.takeRequest()将其分配给一个新RecordedRequest变量,那么测试会挂起第二个server.takeRequest(),有时甚至是第一个 - 如果我在模拟器上运行它会挂起第server.takeRequest()一种方法,但如果我在我的物理Android设备上运行它,它会冻结第二种方法server.takeRequest()方法.
public void testSomething() {
final MockWebServer server = new MockWebServer();
try {
server.play();
server.enqueue(new MockResponse().setBody("")
.setResponseCode(HttpURLConnection.HTTP_INTERNAL_ERROR));
server.enqueue(new MockResponse().setBody("")
.setResponseCode(HttpURLConnection.HTTP_OK));
server.enqueue(new MockResponse().setBody("")
.setResponseCode(HttpURLConnection.HTTP_OK));
URL url = server.getUrl("/");
// This internal method overrides some of the hardcoded URLs
// within the SDK that I'm testing.
Util.overrideUrls(url.toString())
// Do some server calls via the SDK utilizing the mock server url.
RecordedRequest requestFor500 = server.takeRequest(); …Run Code Online (Sandbox Code Playgroud) 我有一个使用Passport进行身份验证的MEAN堆栈应用程序.
我正在尝试编写一个登录的单元测试,并检查是否重定向到root(/).但是,每当我运行Mocha时,我都会收到以下错误消息:
1) POST /home Login test should redirect to / after login:
Error: the string "Not a valid BCrypt hash." was thrown, throw an Error :)
Run Code Online (Sandbox Code Playgroud)
这是我的单元测试LoginSpec.js:
var should = require("should");
var app = require("../app");
var mongoose = require("mongoose");
var User = mongoose.model("User");
var request = require("supertest");
var agent = request.agent(app);
...
describe('POST /home', function() {
before(function(done) {
user = new User({
email: "john@email.com",
firstName: "John",
lastName: "Doe",
password: "strongPassword",
username: "johndoe"
});
user.save(done);
}) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Apache HTTP Client库在Android中发出GET请求,但是当我尝试发出请求时,我得到了以下的堆栈跟踪.
06-17 16:19:58.891 10605-10605/com.myapp.test.android E/SELinux? selinux_android_seapp_context_reload: seapp_contexts file is loaded from /data/security/spota/seapp_contexts
06-17 16:19:58.891 10605-10605/com.myapp.test.android D/dalvikvm? Late-enabling CheckJNI
06-17 16:19:59.001 10605-10605/com.myapp.test.android I/dalvikvm? Could not find method org.apache.http.client.utils.URLEncodedUtils.encPath, referenced from method org.apache.http.client.utils.URIBuilder.encodePath
06-17 16:19:59.001 10605-10605/com.myapp.test.android W/dalvikvm? VFY: unable to resolve static method 2455: Lorg/apache/http/client/utils/URLEncodedUtils;.encPath (Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/lang/String;
06-17 16:19:59.001 10605-10605/com.myapp.test.android D/dalvikvm? VFY: replacing opcode 0x71 at 0x0002
06-17 16:19:59.001 10605-10605/com.myapp.test.android I/dalvikvm? Could not find method org.apache.http.client.utils.URLEncodedUtils.encUric, referenced from method org.apache.http.client.utils.URIBuilder.encodeUric
06-17 16:19:59.001 10605-10605/com.myapp.test.android W/dalvikvm? VFY: unable to resolve static method 2456: …Run Code Online (Sandbox Code Playgroud) 我正在使用MEAN堆栈构建一个网站,但用PostGRES替换MongoDB,结果使用Sequelize ORM.
我有两个型号 - User和AudioConfig.一个User可以有很多AudioConfig和AudioConfig属于一个User由createdBy和updatedBy.
以下是我的协会使用Sequelize的方式
models.User.hasMany(models.AudioConfig, {
foreignKey: {
name: 'createdBy',
allowNull: false
}
});
models.User.hasMany(models.AudioConfig, {
foreignKey: {
name: 'updatedBy'
}
});
models.AudioConfig.belongsTo(models.User, {
foreignKey: {
name: 'createdBy',
as: 'createdBy',
allowNull: false
}
});
models.AudioConfig.belongsTo(models.User, {
foreignKey: {
name: 'updatedBy',
as: 'updatedBy'
}
});
Run Code Online (Sandbox Code Playgroud)
在我的findAll查询中AudioConfig,我尝试了几种与我在网上找到的不同,但似乎没有像我期望的那样工作:
var Db = require('../../models');
var entityModel = Db.AudioConfig;
exports.index = function (req, res) { …Run Code Online (Sandbox Code Playgroud) 在我的 Angular 2 应用程序中,我有一个带有http.get返回 Observable 方法的服务。
活动.service.ts
\n\npublic getCampaign(campaignId: string): Observable<Campaign> {\n return this.http.get(this.campaignsUrl + \'/\' + campaignId, options)\n .map(this.extractData)\n .catch(this.handleError);\n}\n\nprivate extractData(res: Response) {\n let body = res.json();\n return body.data || body || {};\n}\n\nprivate handleError(error: Response | any) {\n // In a real world app, we might use a remote logging infrastructure\n let errMsg: string;\n if (error instanceof Response) {\n const body = error.json() || \'\';\n const err = body.error || JSON.stringify(body);\n errMsg = `${error.status} - …Run Code Online (Sandbox Code Playgroud) 假设我有一个字符串数组,如下所示:
0 ["Some plain text"]
1 ["Foobar chicken"]
Run Code Online (Sandbox Code Playgroud)
我想在每个String(在数组的每个索引中)搜索特定的子字符串,比如说plain,然后true在找到子字符串的第一个实例时返回.
这样做最有效的方法是什么?
我知道我可以break在for循环中做一个简单的但是我听说有人说break在for循环中使用是不好的做法.我还听说,使用while和do-while也不好.
这是我使用break的简单实现:
for (String[] index : tmpList) {
retVal = index[2].toLowerCase().contains(keyword);
if (retVal) // Break when retVal is true
break;
}
Run Code Online (Sandbox Code Playgroud)
哪里:
tmpList 是一个 ArrayList<String[]>keyword 是我想要找到的我有一个Android Gradle项目,有多种风格,如此.
android {
...
productFlavors {
apple {
applicationId "com.myapp.apple"
}
orange {
applicationId "com.myapp.orange"
}
banana {
applicationId "com.myapp.banana"
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
在我的build.gradle我也有下面的代码片段,如果它是本地构建,则设置versionName为0.8-dev,如果是Jenkin的构建,则设置为0.8-123.
android {
...
defaultConfig {
...
// Get the build number from Jenkins, otherwise use 'dev'
ext.buildNumber = System.getenv("BUILD_NUMBER") ?: "dev"
versionName "0.8-$buildNumber"
...
}
}
Run Code Online (Sandbox Code Playgroud)
由于我现在对同一个项目有不同的风格,我想给versionName它加上风味的前缀,所以它看起来像这个apple-0.8-dev或orange-0.8-dev,这取决于它的味道.
我该怎么做呢?
我尝试过使用BuildConfig.FLAVOR但我无法访问build.gradle.
我正在使用Selenium WebDriver(Java),并试图在WebDriver登录到页面后更改URL。
有没有一种方法可以:
谢谢!
我正在使用ProGuard来混淆我的Android应用.
我还WebView用来显示一个网页(一个HTML演练页面),其中包含一个关闭该按钮的按钮WebView.Javascript中有一个函数可以回调一个closeWalkthrough()方法:
function closeFunction()
{
MyClass.closeWalkthrough();
}
Run Code Online (Sandbox Code Playgroud)
相关的Java类看起来像这样:
package com.myclass.android;
import android.app.Activity;
import android.content.Context;
import android.webkit.JavascriptInterface;
public class JavaScriptInterface {
Context _context;
JavaScriptInterface(Context context) {
_context = context;
}
@JavascriptInterface
public void closeWalkthrough() {
((Activity) _context).finish();
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的ProGuard文件中添加了以下标志,希望它不会混淆JavaScriptInterface类,因为如果我理解正确,Javascript方法MyClass.closeWalkthrough()正在寻找closeWalkthrough()我的JavaScriptInterfaceJava类中找到的.
...
-keepattributes JavascriptInterface
-keep public class com.myclass.android.JavaScriptInterface { *; }
...
Run Code Online (Sandbox Code Playgroud)
但是,每当我查看我的mapping.txt文件时,我都会看到它com.myclass.android.JavaScriptInterface被混淆:
...
com.myclass.android.JavaScriptInterface -> axf:
android.content.Context _context -> a
...
Run Code Online (Sandbox Code Playgroud)
我甚至-keep …
我正在使用"@angular/forms": "~2.1.0"and "angular-cli": "1.0.0-beta.19-3"并且在我进行异步调用以获取列表之后尝试设置my FormGroup(s campaignForm) campaign_config_id属性的默认值campaignConfigs.
我已经尝试使用以下其他SO建议,但我明白了TypeError: _this.campaignForm.controls.campaign_config_id.updateValue is not a function.
this.campaignConfigService.getCampaignConfigs()
.subscribe(
campaignConfigs => {
...
this.campaignForm.controls['campaign_config_id'].updateValue(campaignConfigs[0].id)
}
);
Run Code Online (Sandbox Code Playgroud)
我也试着铸造this.campaignForm.controls['campaign_config_id']成NgControl,FormControl,SelectControlValueAccessor和其他对象,但他们都没有的.updateValue功能.
关于如何做到这一点的任何建议?
java ×5
android ×4
angular ×2
apache-pig ×1
api ×1
arrays ×1
build.gradle ×1
devise ×1
express ×1
gradle ×1
hadoop ×1
homebrew ×1
javascript ×1
json ×1
junit ×1
mocha.js ×1
mocking ×1
node.js ×1
observable ×1
passport.js ×1
proguard ×1
selenium ×1
sequelize.js ×1
substring ×1
supertest ×1
testng ×1