ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

Karateによるテスト自動化(書きかけ)

Karate

github.com

動作環境

2021/02/09時点での最新版は0.9.6だが、Nashorn前提になっている。
しかしJDK15以降でNashornは削除されているため、JDK15以降では動作しない。

プロジェクトの作成

mvn archetype:generate -DarchetypeGroupId="com.intuit.karate" -DarchetypeArtifactId=karate-archetype -DarchetypeVersion="0.9.6" -DgroupId="com.example" -DartifactId=myproject

SpringでList自体をBeanとして定義する

Listの要素にしたいクラス(Config.java)

package com.example.utillist;

public class Config {
    private int num;
    private String data;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
    
}

XML定義(config.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd">

    <util:list id="configList" value-type="com.example.utillist.Config">
        <ref bean="config0" />
        <ref bean="config1" />
        <ref bean="config2" />
    </util:list>

    <bean id="config0" class="com.example.utillist.Config">
        <property name="num" value="0" />
        <property name="data" value="this is cofig 0" />
    </bean>
    <bean id="config1" class="com.example.utillist.Config">
        <property name="num" value="1" />
        <property name="data" value="this is cofig 1" />
    </bean>
    <bean id="config2" class="com.example.utillist.Config">
        <property name="num" value="2" />
        <property name="data" value="this is cofig 2" />
    </bean>
</beans>

利用

package com.example.utillist;

import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource("classpath:config.xml")
public class UtillistApplication {

	public static void main(String[] args) {
		var applicationContext = SpringApplication.run(UtillistApplication.class, args);
		List<Config> list = (List)applicationContext.getBean("configList");
		list.forEach(config -> {
			System.out.println(config.getNum() + ":" + config.getData());
		});
	}

}

Selenideでclickに失敗するのを回避

Selenideで↓のようにclickを実行しようとすると、失敗するケースがありました。

$(By.id("id1")).click();

sendKeysを試したらうまくいきました。

$(By.id("id1")).sendKeys(Keys.ENTER);

原因はきちんと追っていないのですが、、、id1に紐づくのがsubmitボタンではなく、onclickでXMLHttpRequest.send()とかやってるとダメみたいでした。

実践 Selenium WebDriver

実践 Selenium WebDriver

組み込みのSQLiteを利用する

createの例

import sqlite3

connection = sqlite3.connect('test.db') # 無い場合は新規作成される
cursor = connection.cursor()
cursor.execute('create table kokyaku (id int, name varchar(64))')
connection.commit()
connection.close()

insertの例

import sqlite3

connection = sqlite3.connect('test.db')
cursor = connection.cursor()

kokyaku_data = [
    (1, 'ペガ'),
    (2, 'ドラコ'),
    (3, 'グリ'),
]

for kokyaku in kokyaku_data:
    cursor.execute('insert into kokyaku values (?, ?)', kokyaku)
connection.commit()

connection.close()

selectの例

import sqlite3

connection = sqlite3.connect('test.db')
cursor = connection.cursor()

for row in cursor.execute('select * from kokyaku'):
    print(row)

connection.close()

ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD の除去

Eclipseに導入したSpotBugsで、「インスタンスメソッドからstaticフィールドへの書き込み」がエラー検知されました。↓こんなコードです。

public class WriteStatic {

	private static String s;
	
	public void method(String value) {
		s = value;
	}
}

f:id:ksino:20200508233252p:plain

諸事情によりソースは修正できないため、このルールを除外しようと思いました。
SpotBugsの設定([Preferences]-[Java]-[SpotBugs])の、[ディテクター構成]を眺めても、該当しそうな項目がない…ということで、一つ一つしらみつぶしに調べたのでメモです。

結論としては[ディテクターID]が「UnreadFields」のチェックを外せばよいようです。
正直、関連がよくわかりませんでした。。。
f:id:ksino:20200508233311p:plain

JavaScriptメモ(随時更新)

変数はletで宣言すべき

varは古い機能である。

let a;
文字列と数値の演算

"+"だけが文字列として演算される。

console.log("12" + 3); // "123"
console.log("12" - 3); // 9
console.log("12" * 3); // 36
console.log("12" / 3); // 4