#author("2019-10-20T03:13:32+00:00","default:wikiadmin","wikiadmin") #author("2020-04-11T02:17:53+00:00","default:wikiadmin","wikiadmin") -自動テストについてまとめたページ #contents *gatling [#cd80eefd] **自分でソース作成 [#y1f28046] **ブラウザ記憶してソース [#b2c359db] *プロダクト [#r5b127ee] **Selenium [#kc56310a] ***Xpath [#t94e85c4] ***CSSSelector [#rfb9d7e0] JSoupでもほぼ等価なのでこちらを推奨 |td#MAINAREA01 > div.tp-box-05 > div > div > p.tp-text-01|階層順序を厳格に指定する場合| |div[class*='_middle_']|クラス名部分一致| |div[class^='prefix']|クラス名前方一致| |div[class$='_suffix']|クラス名後方一致| |By.cssSelector("a[href^='/usage/detail']")|Aタグ中身前方一致| カスタマイズ属性で絞る |div[data-custom='xxxx']|通常の属性ならhrefなりに変えれば良い| ***一つに絞れない時はループで回して強引に [#bc10c725] List<WebElement> webElementList =driver.findElements(By.cssSelector("div[class^='prefix_']")); WebElement login = webElementList.stream().filter(webElement -> webElement.getText().contains("ログイン")).findFirst().get(); login.click(); ***リンクのテキストで取得 [#ga8e02d3] By.linkText("hogehoge") **JSoup [#raac5768] |クラスで複数取得|Elements masthead = doc.select("div.masthead");| |クラスで単数取得|Element masthead = doc.select("div.masthead").first();| |階層構造で複数取得|Elements resultLinks = doc.select("h3.r > a"); // direct a after h3| |ファイルから読み込み|Document doc = Jsoup.parse(new File("/tmp/input.html"), "UTF-8", "http://example.com/");| **HTMLUnit [#ea6e5f7a] -value属性をセット。value以外にもセットできる。 HtmlElement input = page.getHtmlElementById(id); input.setAttribute("value", value); -webclient.getPageの引数にfile://を指定するとローカルのファイルも指定可能だが、相対パスのファイルを全部用意しないといけないので面倒。 webClient.getPage("file:///Users/ **XPath [#xc1e5e21] -getFirstByXpathを使うと一個だけ取得できる |//a[@id='idname']|AタグのIDで抽出| |//a[@href='/login.html']|Aタグのリンク先で抽出| |//input[@type='submit']|type=submitのタグを取得| |//input[@value='検索']|検索のinputタグを取得| |//td[contains(.,'検索したい文字列')]|検索したい文字列が含まれているものを取得| |img[alt='ログアウト']|altで検索| |//a[text()='ログアウト']"|Aのテキストで検索| -複数取得する場合はLIST |final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@name='John']").get(0);|無理やりキャスト| **xpathの検証 [#fe0b93a0] chromeのコンソールで $x('xpath')でOK! **css selectorの検証 [#b03210c4] chromeのコンソールで $('div div div p') **htmlunit [#x50af09f] 主にPHPバッチで利用 |クラスやID指定|div[class=tbl-pc]| |親子関係|table tbody tr td| *Selenium(java ラッパーで Selenide がある) [#k23e2daf] **概要 [#m92a49fb] -各種ブラウザ対応のdriverを入れる -各種言語対応のselenium libraryを入れる -ローカル接続の場合はselenium-severは不要 **Macでwebdriver [#gd9dbecb] +sudo pip3 install selenium +/usr/local/binに対象のwebdriverを配置 ***成功バージョン [#kd34fd8d] -chromedriverを入れる brew update brew install chromedriver -geckodriverを入れる brew update brew install geckodriver -ドライバーの位置を指定する -MACで以下のコマンドにてインストールするとデフォルトの場所にインストールされる brew tap homebrew/cask && brew cask install chromedriver /usr/local/binに入るので手動で入れるならそこに置く -WindowsだとPATHの通るところにおいておけばよい。 C:\Users\xxx\AppData\Local\Microsoft\WindowsApps ***失敗バージョン [#p20f8e2a] brew update brew install selenium-server-standalone brew install chromedriver だとだめ!jarを直接実行する。 java -Dwebdriver.chrome.bin="/Applications/Google Chrome.app" -Dwebdriver.chrome.drir=/usr/local/bin/chromedriver -jar selenium-server-standalone-3.4.0.jar しかし上記のchromedriverさえインストールできればあとはサーバー不要なのであった! **JMeter [#hfe22ad2] **Geb(groovy) [#ac422465]