回答編集履歴

2

ミス

2020/09/13 13:19

投稿

shirai
shirai

スコア1290

test CHANGED
@@ -292,7 +292,7 @@
292
292
 
293
293
  try:
294
294
 
295
- # text1は10文字以だとエラーが出るシステムだとする
295
+ # text1は10文字以だとエラーが出るシステムだとする
296
296
 
297
297
  selenium_instance.page01('あああああああああああああああ', 'いいい', 1, 3, 'ううう', 'えええ')
298
298
 

1

追記

2020/09/13 13:19

投稿

shirai
shirai

スコア1290

test CHANGED
@@ -137,3 +137,235 @@
137
137
  ついでに言うとgoogleはスクレイピング禁止です。
138
138
 
139
139
  規約で明記されていますのでご注意を。
140
+
141
+
142
+
143
+ # コメントを受けて追記
144
+
145
+
146
+
147
+ だとしたらそもそも分け方が間違っています。
148
+
149
+ page毎に関数を作り、テスト毎に値だけ渡してやるべきです。
150
+
151
+
152
+
153
+ 下記例は
154
+
155
+ - pege01で色々とフォームを入力し、バリデーションが正しいとpage02に遷移する。
156
+
157
+ - page02で色々とフォームを入力し、バリデーションが正しいとpage03に遷移する。
158
+
159
+
160
+
161
+ という想定で作ってみました。
162
+
163
+
164
+
165
+ ```python
166
+
167
+ # test.py
168
+
169
+
170
+
171
+ from selenium import webdriver
172
+
173
+ from selenium.webdriver.common.keys import Keys
174
+
175
+ from selenium.webdriver.support.select import Select
176
+
177
+
178
+
179
+ class selenium_base(object):
180
+
181
+ def __init__(self):
182
+
183
+ self.driver = webdriver.Chrome("D:\chromedriver")
184
+
185
+ self.driver.get("page01の入力ページ")
186
+
187
+
188
+
189
+ def page01(self, text1, text2, radio1, radio2, pulldown1, pulldown2):
190
+
191
+ hoge1 = '/html/body/div/div[1]/pre/em[1]'
192
+
193
+ hoge2 = '/html/body/div/div[18]' # hoge6まで適切なxpathを書いておく
194
+
195
+
196
+
197
+ self.driver.find_element_by_xpath(hoge1).send_keys(text1)
198
+
199
+ self.driver.find_element_by_xpath(hoge2).send_keys(text2)
200
+
201
+ self.driver.find_elements_by_xpath(hoge3)[radio1].click()
202
+
203
+ self.driver.find_elements_by_xpath(hoge4)[radio2].click()
204
+
205
+ Select(self.driver.find_element_by_xpath(hoge5)).select_by_visible_text(pulldown1)
206
+
207
+ Select(self.driver.find_element_by_xpath(hoge6)).select_by_visible_text(pulldown2)
208
+
209
+ self.driver.find_element_by_class_name('btn-primary').click() # 最後に送信ボタンを押す
210
+
211
+
212
+
213
+ def page02(self, text1, text2, radios):
214
+
215
+ hoge1 = '/html/body/div/div[1]/pre/em[1]'
216
+
217
+ hoge2 = '/html/body/div/div[18]'
218
+
219
+ hoge3 = '/html/body/div/div[19]/p'
220
+
221
+
222
+
223
+ self.driver.find_element_by_xpath(hoge1).send_keys(text1)
224
+
225
+ self.driver.find_element_by_xpath(hoge2).send_keys(text2)
226
+
227
+ for radio in radios:
228
+
229
+ self.driver.find_elements_by_xpath(hoge3)[radio].click()
230
+
231
+ self.driver.find_element_by_class_name('btn-primary').click() # 最後に送信ボタンを押す
232
+
233
+ ```
234
+
235
+
236
+
237
+ ```python
238
+
239
+ # test_case.py
240
+
241
+
242
+
243
+ import test
244
+
245
+
246
+
247
+ # 正常に最終ページまで遷移するテスト
248
+
249
+ def success_test:
250
+
251
+ selenium_instance = test.selenium_base()
252
+
253
+ try:
254
+
255
+ selenium_instance.page01('あああ', 'いいい', 1, 3, 'ううう', 'えええ')
256
+
257
+ if selenium_instance.title != 'page02のタイトル':
258
+
259
+ print('正常なケースを試したはずですが、page01からpage02に遷移できませんでした。')
260
+
261
+ selenium_instance.quit()
262
+
263
+ return
264
+
265
+ selenium_instance.page02('あああ', 'いいい', [2, 3, 6, 7])
266
+
267
+ if selenium_instance.title != 'page03のタイトル':
268
+
269
+ print('正常なケースを試したはずですが、page02からpage03に遷移できませんでした。')
270
+
271
+ else:
272
+
273
+ print('正常にpage03まで遷移できました。')
274
+
275
+ catch:
276
+
277
+ print('success_test中にエラーが発生しました。')
278
+
279
+ finally:
280
+
281
+ selenium_instance.quit()
282
+
283
+ print('success_testを終了します。')
284
+
285
+
286
+
287
+ # page01からpage02への遷移で失敗するテスト
288
+
289
+ def error_test1:
290
+
291
+ selenium_instance = test.selenium_base()
292
+
293
+ try:
294
+
295
+ # text1は10文字以内だとエラーが出るシステムだとする
296
+
297
+ selenium_instance.page01('あああああああああああああああ', 'いいい', 1, 3, 'ううう', 'えええ')
298
+
299
+ if selenium_instance.title == 'page02のタイトル':
300
+
301
+ print('異常なケースを試したはずですが、page01からpage02に遷移できてしまいました。')
302
+
303
+ else:
304
+
305
+ print('想定通りpage01でエラーが発生し先に進めませんでした。')
306
+
307
+ catch:
308
+
309
+ print('error_test1中にエラーが発生しました。')
310
+
311
+ finally:
312
+
313
+ selenium_instance.quit()
314
+
315
+ print('error_test1を終了します。')
316
+
317
+
318
+
319
+ # page02からpage03への遷移で失敗するテスト
320
+
321
+ def error_test2:
322
+
323
+ selenium_instance = test.selenium_base()
324
+
325
+ try:
326
+
327
+ selenium_instance.page01('あああ', 'いいい', 1, 3, 'ううう', 'えええ')
328
+
329
+ if selenium_instance.title != 'page02のタイトル':
330
+
331
+ print('正常なケースを試したはずですが、page01からpage02に遷移できませんでした。')
332
+
333
+ selenium_instance.quit()
334
+
335
+ return
336
+
337
+ # ラジオボタンの選択肢は5つ以下しか選べないシステムだとする
338
+
339
+ selenium_instance.page02('あああ', 'いいい', [2, 3, 6, 7, 10, 11])
340
+
341
+ if selenium_instance.title == 'page03のタイトル':
342
+
343
+ print('異常なケースを試したはずですが、page02からpage03に遷移できてしまいました。')
344
+
345
+ else:
346
+
347
+ print('想定通りpage02でエラーが発生し先に進めませんでした。')
348
+
349
+ catch:
350
+
351
+ print('error_test2中にエラーが発生しました。')
352
+
353
+ finally:
354
+
355
+ selenium_instance.quit()
356
+
357
+ print('error_test2を終了します。')
358
+
359
+
360
+
361
+ success_test
362
+
363
+ error_test1
364
+
365
+ error_test2
366
+
367
+ ```
368
+
369
+
370
+
371
+ pytestの書き方ではないですが必要だったら適宜やってみてください。