Playwright Test
(@playwright/tet
からインポートしたtest
)を用いた標準的な方法ではなく、素のAPIを使用した方法となります。playwright.config.ts
の設定により追加するのがよいと思われます。/* Configure projects for major browsers */
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] }
},
{
name: 'chrome-dark',
use: { ...devices['Desktop Chrome'], colorScheme: 'dark' }
},
{
name: 'chrome-light',
use: { ...devices['Desktop Chrome'], colorScheme: 'light' }
},
:
npx playwright test --project=chrome-dark
]]>await
の行のように2段構えとしまし。
class
)の出現又は消去(この場合は消去)を待つ// ドロップダウンの切り替え
async function selectDropdownOption(page, selectorTestId, buttonText) {
await page.getByTestId(selectorTestId).locator('svg').click();
await page
.locator('div')
.filter({ hasText: new RegExp(`^${buttonText}$`) })
.first()
.click();
await page.waitForSelector('.n-base-selection:not(.n-base-selection--active)');
await page.waitForTimeout(200);
}
page.screenshot
で可能です。つまり、上記の関数を呼んだ後に、次を呼ぶ感じです。await page.screenshot({path: 'screenshot.png'}); // ルートフォルダに保存される。
base64
の出力などができる。 const screenshotFolder = isDarkMode ? 'test-results/dark' : 'test-results/light';
// 条件1
await selectDropdownOption(page, 'theme-color-selector', 'ライトモード');
await selectDropdownOption(page, 'editor-color-selector', 'テーマカラーと連動する');
await page.screenshot({ path: `${screenshotFolder}/1.png` });
// 条件2
await selectDropdownOption(page, 'theme-color-selector', 'ダークモード');
await selectDropdownOption(page, 'editor-color-selector', 'テーマカラーと連動する');
await page.screenshot({ path: `${screenshotFolder}/2.png` });
]]>$ pnpm create playwright
$ pnpm exec playwright test
エンドツーエンドのテストを実行します。
$ pnpm exec playwright test --ui
インタラクティブな UI モードを起動します。
$ pnpm exec playwright test --project=chromium
Desktop Chrome でのみテストを実行します。
$ pnpm exec playwright test example
特定のファイルでテストを実行します。
$ pnpm exec playwright test --debug
デバッグモードでテストを実行します。
$ pnpm exec playwright codegen
Codegen を使ってテストを自動生成します。
<n-select v-model:value="themeColor" :options="themeColorOptions" />
↓
<n-select v-model:value="themeColor" :options="themeColorOptions" data-testid="theme-color-selector" />
// ドロップダウンの切り替え
async function selectDropdownOption(page, selectorTestId, buttonText) {
await page.getByTestId(selectorTestId).locator('svg').click();
await page
.locator('div')
.filter({ hasText: new RegExp(`^${buttonText}$`) })
.first()
.click();
}
// 条件1
await selectDropdownOption(page, 'theme-color-selector', 'ライトモード');
await selectDropdownOption(page, 'editor-color-selector', 'テーマカラーと連動する');
// なにかテスト
// 条件2
await selectDropdownOption(page, 'theme-color-selector', 'ダークモード');
await selectDropdownOption(page, 'editor-color-selector', 'テーマカラーと連動する');
// なにかテスト
// 背景色の確認
async function expectBackgroundColor(page, selector, expectedColor) {
const bgColor = await page.$eval(selector, (el) => {
return getComputedStyle(el).backgroundColor;
});
expect(bgColor).toBe(expectedColor);
}
これ以外にも何かと壁にぶつかり、ノウハウが必要がことがわかりました。別記事に書く予定です。
]]>@import "./style.scss";
@import "./darkmode.scss";
:
<link rel="stylesheet" href="./css/app.css">
"liveSassCompile.settings.formats": [
{
"format": "expanded", <-- ここをcompressedに変更するか、変更した設定を配列に追加すれば、圧縮されたCSSが生成できる。
"extensionName": ".css",
"savePath": "/任意の場所/css",
}
]
お好みで以下の設定をおこなう。
任意の場所/css/*.css
任意の場所/css/*.map
Google Maps APIを使用してAndroidアプリを作成する基本的な手順をメモします。
私は既にGoogle Cloud Platform (GCP)のアカウントがありましたが、アカウントを作成する手順から説明します。
以下のコマンドで生成します。
$ yarn create expo-app MyProject
iOS及びAndoroidのためのReact Native Mapviewコンポーネントの react-native-maps をインストールする。
$ yarn add react-native-maps
app.json
のandroid
の下に次の様に設定します。
"config": {
"googleMaps": {
"apiKey": "xxxxx"
}
}
ホーム画面にGoogle Mapを表示するためのコードは例えば次になります。
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
import MapView, { PROVIDER_GOOGLE } from 'react-native-maps';
export default function App() {
return (
<View style={styles.container}>
<Text>Chill Parking</Text>
<MapView
style={styles.map}
provider={PROVIDER_GOOGLE}
initialRegion={{
latitude: 35.714,
longitude: 139.4256,
latitudeDelta: 0.0461,
longitudeDelta: 0.0210,
}}
/>
<StatusBar style='auto' />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
map: {
width: '100%',
height: '80%',
},
});
]]>