Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 197 scoped_ptr<base::Value> value; | 197 scoped_ptr<base::Value> value; |
| 198 ASSERT_EQ(kUnknownError, ExecuteQuit(&map, &session, params, &value).code()); | 198 ASSERT_EQ(kUnknownError, ExecuteQuit(&map, &session, params, &value).code()); |
| 199 ASSERT_FALSE(map.Has(session.id)); | 199 ASSERT_FALSE(map.Has(session.id)); |
| 200 ASSERT_FALSE(value.get()); | 200 ASSERT_FALSE(value.get()); |
| 201 } | 201 } |
| 202 | 202 |
| 203 namespace { | 203 namespace { |
| 204 | 204 |
| 205 class FindElementChrome : public StubChrome { | 205 class FindElementChrome : public StubChrome { |
| 206 public: | 206 public: |
| 207 explicit FindElementChrome(bool element_exists) | 207 FindElementChrome(bool element_exists, bool only_one, int query_count) |
|
kkania
2013/01/15 22:24:36
this is a bit ugly. just wondering if there's a cl
chrisgao (Use stgao instead)
2013/01/16 19:06:24
Done.
| |
| 208 : element_exists_(element_exists), called_(false) {} | 208 : element_exists_(element_exists), only_one_(only_one), |
| 209 query_count_(query_count), current_count_(0) { | |
| 210 if (only_one_) { | |
| 211 base::DictionaryValue element; | |
| 212 element.SetString("ELEMENT", "1"); | |
| 213 result_.reset(element.DeepCopy()); | |
| 214 } else { | |
| 215 base::DictionaryValue element1; | |
| 216 element1.SetString("ELEMENT", "1"); | |
| 217 base::DictionaryValue element2; | |
| 218 element2.SetString("ELEMENT", "2"); | |
| 219 base::ListValue list; | |
| 220 list.Append(element1.DeepCopy()); | |
| 221 list.Append(element2.DeepCopy()); | |
| 222 result_.reset(list.DeepCopy()); | |
| 223 } | |
| 224 } | |
| 209 virtual ~FindElementChrome() {} | 225 virtual ~FindElementChrome() {} |
| 210 | 226 |
| 227 const base::Value* GetResult() { return result_.get(); } | |
|
kkania
2013/01/15 22:24:36
i don't understand the purpose of this
chrisgao (Use stgao instead)
2013/01/16 19:06:24
Used to verified that the returned result is expec
| |
| 211 const std::string& GetFrame() { return frame_; } | 228 const std::string& GetFrame() { return frame_; } |
| 212 const std::string& GetFunction() { return function_; } | 229 const std::string& GetFunction() { return function_; } |
| 213 const base::ListValue* GetArgs() { return args_.get(); } | 230 const base::ListValue* GetArgs() { return args_.get(); } |
| 214 | 231 |
| 215 // Overridden from Chrome: | 232 // Overridden from Chrome: |
| 216 virtual Status CallFunction(const std::string& frame, | 233 virtual Status CallFunction(const std::string& frame, |
| 217 const std::string& function, | 234 const std::string& function, |
| 218 const base::ListValue& args, | 235 const base::ListValue& args, |
| 219 scoped_ptr<base::Value>* result) OVERRIDE { | 236 scoped_ptr<base::Value>* result) OVERRIDE { |
| 220 if (element_exists_ && called_) { | 237 ++current_count_; |
| 221 base::DictionaryValue element; | 238 if (element_exists_ && current_count_ >= query_count_) { |
| 222 element.SetString("ELEMENT", "1"); | 239 result->reset(result_->DeepCopy()); |
| 223 result->reset(element.DeepCopy()); | |
| 224 frame_ = frame; | 240 frame_ = frame; |
| 225 function_ = function; | 241 function_ = function; |
| 226 args_.reset(args.DeepCopy()); | 242 args_.reset(args.DeepCopy()); |
| 227 } else { | 243 } else { |
| 228 result->reset(base::Value::CreateNullValue()); | 244 result->reset(base::Value::CreateNullValue()); |
| 229 } | 245 } |
| 230 called_ = true; | |
| 231 return Status(kOk); | 246 return Status(kOk); |
| 232 } | 247 } |
| 233 private: | 248 private: |
| 234 bool element_exists_; | 249 bool element_exists_; |
| 235 bool called_; | 250 bool only_one_; |
| 251 int query_count_; | |
| 252 int current_count_; | |
| 253 scoped_ptr<base::Value> result_; | |
| 236 std::string frame_; | 254 std::string frame_; |
| 237 std::string function_; | 255 std::string function_; |
| 238 scoped_ptr<base::ListValue> args_; | 256 scoped_ptr<base::ListValue> args_; |
| 239 }; | 257 }; |
| 240 | 258 |
| 241 } // namespace | 259 } // namespace |
| 242 | 260 |
| 243 TEST(CommandsTest, SuccessfulFindElement) { | 261 TEST(CommandsTest, SuccessfulFindElement) { |
| 244 FindElementChrome* chrome = new FindElementChrome(true); | 262 FindElementChrome* chrome = new FindElementChrome(true, true, 2); |
| 245 Session session("id", scoped_ptr<Chrome>(chrome)); | 263 Session session("id", scoped_ptr<Chrome>(chrome)); |
| 246 session.implicit_wait = 100; | 264 session.implicit_wait = 100; |
| 247 session.frame = "frame_id1"; | 265 session.frame = "frame_id1"; |
| 248 base::DictionaryValue params; | 266 base::DictionaryValue params; |
| 249 params.SetString("using", "id"); | 267 params.SetString("using", "id"); |
| 250 params.SetString("value", "a"); | 268 params.SetString("value", "a"); |
| 251 scoped_ptr<base::Value> value; | 269 scoped_ptr<base::Value> value; |
| 252 ASSERT_EQ(kOk, ExecuteFindElement(&session, params, &value).code()); | 270 ASSERT_EQ(kOk, ExecuteFindElement(&session, params, &value).code()); |
| 253 base::DictionaryValue* element; | 271 ASSERT_TRUE(value.get()); |
| 254 ASSERT_TRUE(value->GetAsDictionary(&element)); | 272 ASSERT_TRUE(value->Equals(chrome->GetResult())); |
| 255 ASSERT_EQ(1U, element->size()); | |
| 256 std::string element_id; | |
| 257 ASSERT_TRUE(element->GetString("ELEMENT", &element_id)); | |
| 258 ASSERT_EQ("1", element_id); | |
| 259 ASSERT_EQ("frame_id1", chrome->GetFrame()); | 273 ASSERT_EQ("frame_id1", chrome->GetFrame()); |
| 260 ASSERT_EQ(webdriver::atoms::asString(webdriver::atoms::FIND_ELEMENT), | 274 ASSERT_EQ(webdriver::atoms::asString(webdriver::atoms::FIND_ELEMENT), |
| 261 chrome->GetFunction()); | 275 chrome->GetFunction()); |
| 262 const base::ListValue* args = chrome->GetArgs(); | 276 const base::ListValue* args = chrome->GetArgs(); |
| 263 ASSERT_TRUE(args); | 277 ASSERT_TRUE(args); |
| 264 ASSERT_EQ(1U, args->GetSize()); | 278 base::DictionaryValue param; |
| 265 const base::DictionaryValue* dict; | 279 param.SetString("id", "a"); |
| 266 ASSERT_TRUE(args->GetDictionary(0U, &dict)); | 280 base::ListValue expected_args; |
| 267 ASSERT_EQ(1U, dict->size()); | 281 expected_args.Append(param.DeepCopy()); |
| 268 std::string id; | 282 ASSERT_TRUE(expected_args.Equals(args)); |
| 269 ASSERT_TRUE(dict->GetString("id", &id)); | |
| 270 ASSERT_EQ("a", id); | |
| 271 } | 283 } |
| 272 | 284 |
| 273 TEST(CommandsTest, FailedFindElement) { | 285 TEST(CommandsTest, FailedFindElement) { |
| 274 Session session("id", scoped_ptr<Chrome>(new FindElementChrome(false))); | 286 Session session("id", |
| 287 scoped_ptr<Chrome>(new FindElementChrome(false, true, 1))); | |
|
kkania
2013/01/15 22:24:36
4 spaces; fix others too
chrisgao (Use stgao instead)
2013/01/16 19:06:24
Done.
| |
| 275 session.implicit_wait = 0; | 288 session.implicit_wait = 0; |
| 276 base::DictionaryValue params; | 289 base::DictionaryValue params; |
| 277 params.SetString("using", "id"); | 290 params.SetString("using", "id"); |
| 278 params.SetString("value", "a"); | 291 params.SetString("value", "a"); |
| 279 scoped_ptr<base::Value> value; | 292 scoped_ptr<base::Value> value; |
| 280 ASSERT_EQ(kNoSuchElement, | 293 ASSERT_EQ(kNoSuchElement, |
| 281 ExecuteFindElement(&session, params, &value).code()); | 294 ExecuteFindElement(&session, params, &value).code()); |
| 282 } | 295 } |
| 283 | 296 |
| 284 namespace { | |
| 285 | |
| 286 class FindElementsChrome : public StubChrome { | |
| 287 public: | |
| 288 explicit FindElementsChrome(bool element_exists) | |
| 289 : element_exists_(element_exists), called_(false) {} | |
| 290 virtual ~FindElementsChrome() {} | |
| 291 | |
| 292 const std::string& GetFrame() { return frame_; } | |
| 293 const std::string& GetFunction() { return function_; } | |
| 294 const base::ListValue* GetArgs() { return args_.get(); } | |
| 295 | |
| 296 // Overridden from Chrome: | |
| 297 virtual Status CallFunction(const std::string& frame, | |
| 298 const std::string& function, | |
| 299 const base::ListValue& args, | |
| 300 scoped_ptr<base::Value>* result) OVERRIDE { | |
| 301 if (element_exists_ && called_) { | |
| 302 base::DictionaryValue element1; | |
| 303 element1.SetString("ELEMENT", "1"); | |
| 304 base::DictionaryValue element2; | |
| 305 element2.SetString("ELEMENT", "2"); | |
| 306 base::ListValue list; | |
| 307 list.Append(element1.DeepCopy()); | |
| 308 list.Append(element2.DeepCopy()); | |
| 309 result->reset(list.DeepCopy()); | |
| 310 frame_ = frame; | |
| 311 function_ = function; | |
| 312 args_.reset(args.DeepCopy()); | |
| 313 } else { | |
| 314 result->reset(new base::ListValue()); | |
| 315 } | |
| 316 called_ = true; | |
| 317 return Status(kOk); | |
| 318 } | |
| 319 private: | |
| 320 bool element_exists_; | |
| 321 bool called_; | |
| 322 std::string frame_; | |
| 323 std::string function_; | |
| 324 scoped_ptr<base::ListValue> args_; | |
| 325 }; | |
| 326 | |
| 327 } //namespace | |
| 328 | |
| 329 TEST(CommandsTest, SuccessfulFindElements) { | 297 TEST(CommandsTest, SuccessfulFindElements) { |
| 330 FindElementsChrome* chrome = new FindElementsChrome(true); | 298 FindElementChrome* chrome = new FindElementChrome(true, false, 2); |
| 331 Session session("id", scoped_ptr<Chrome>(chrome)); | 299 Session session("id", scoped_ptr<Chrome>(chrome)); |
| 332 session.implicit_wait = 100; | 300 session.implicit_wait = 100; |
| 333 session.frame = "frame_id2"; | 301 session.frame = "frame_id2"; |
| 334 base::DictionaryValue params; | 302 base::DictionaryValue params; |
| 335 params.SetString("using", "name"); | 303 params.SetString("using", "name"); |
| 336 params.SetString("value", "b"); | 304 params.SetString("value", "b"); |
| 337 scoped_ptr<base::Value> value; | 305 scoped_ptr<base::Value> value; |
| 338 ASSERT_EQ(kOk, ExecuteFindElements(&session, params, &value).code()); | 306 ASSERT_EQ(kOk, ExecuteFindElements(&session, params, &value).code()); |
| 339 base::ListValue* list; | 307 ASSERT_TRUE(value.get()); |
| 340 ASSERT_TRUE(value->GetAsList(&list)); | 308 ASSERT_TRUE(value->Equals(chrome->GetResult())); |
| 341 ASSERT_EQ(2U, list->GetSize()); | |
| 342 base::DictionaryValue* element1; | |
| 343 ASSERT_TRUE(list->GetDictionary(0U, &element1)); | |
| 344 ASSERT_EQ(1U, element1->size()); | |
| 345 std::string element1_id; | |
| 346 ASSERT_TRUE(element1->GetString("ELEMENT", &element1_id)); | |
| 347 ASSERT_EQ("1", element1_id); | |
| 348 base::DictionaryValue* element2; | |
| 349 ASSERT_TRUE(list->GetDictionary(1U, &element2)); | |
| 350 ASSERT_EQ(1U, element2->size()); | |
| 351 std::string element2_id; | |
| 352 ASSERT_TRUE(element2->GetString("ELEMENT", &element2_id)); | |
| 353 ASSERT_EQ("2", element2_id); | |
| 354 ASSERT_EQ("frame_id2", chrome->GetFrame()); | 309 ASSERT_EQ("frame_id2", chrome->GetFrame()); |
| 355 ASSERT_EQ(webdriver::atoms::asString(webdriver::atoms::FIND_ELEMENTS), | 310 ASSERT_EQ(webdriver::atoms::asString(webdriver::atoms::FIND_ELEMENTS), |
| 356 chrome->GetFunction()); | 311 chrome->GetFunction()); |
| 357 const base::ListValue* args = chrome->GetArgs(); | 312 const base::ListValue* args = chrome->GetArgs(); |
| 358 ASSERT_TRUE(args); | 313 ASSERT_TRUE(args); |
| 359 ASSERT_EQ(1U, args->GetSize()); | 314 base::DictionaryValue param; |
| 360 const base::DictionaryValue* dict; | 315 param.SetString("name", "b"); |
| 361 ASSERT_TRUE(args->GetDictionary(0U, &dict)); | 316 base::ListValue expected_args; |
| 362 ASSERT_EQ(1U, dict->size()); | 317 expected_args.Append(param.DeepCopy()); |
| 363 std::string name; | 318 ASSERT_TRUE(expected_args.Equals(args)); |
| 364 ASSERT_TRUE(dict->GetString("name", &name)); | |
| 365 ASSERT_EQ("b", name); | |
| 366 } | 319 } |
| 367 | 320 |
| 368 TEST(CommandsTest, FailedFindElements) { | 321 TEST(CommandsTest, FailedFindElements) { |
| 369 Session session("id", scoped_ptr<Chrome>(new FindElementsChrome(false))); | 322 Session session("id", |
| 323 scoped_ptr<Chrome>(new FindElementChrome(false, false, 1))); | |
| 370 session.implicit_wait = 0; | 324 session.implicit_wait = 0; |
| 371 base::DictionaryValue params; | 325 base::DictionaryValue params; |
| 372 params.SetString("using", "id"); | 326 params.SetString("using", "id"); |
| 373 params.SetString("value", "a"); | 327 params.SetString("value", "a"); |
| 374 scoped_ptr<base::Value> value; | 328 scoped_ptr<base::Value> value; |
| 375 ASSERT_EQ(kOk, ExecuteFindElements(&session, params, &value).code()); | 329 ASSERT_EQ(kOk, ExecuteFindElements(&session, params, &value).code()); |
| 376 base::ListValue* list; | 330 base::ListValue* list; |
| 377 ASSERT_TRUE(value->GetAsList(&list)); | 331 ASSERT_TRUE(value->GetAsList(&list)); |
| 378 ASSERT_EQ(0U, list->GetSize()); | 332 ASSERT_EQ(0U, list->GetSize()); |
| 379 } | 333 } |
| 380 | 334 |
| 335 TEST(CommandsTest, SuccessfulFindChildElement) { | |
| 336 FindElementChrome* chrome = new FindElementChrome(true, true, 2); | |
| 337 Session session("id", scoped_ptr<Chrome>(chrome)); | |
| 338 session.implicit_wait = 100; | |
|
chrisgao (Use stgao instead)
2013/01/15 20:53:59
I think we need these new testcases, but maybe we
kkania
2013/01/15 22:24:36
I think it'd be better to test it in both.
| |
| 339 session.frame = "frame_id3"; | |
| 340 base::DictionaryValue params; | |
| 341 params.SetString("using", "tag name"); | |
| 342 params.SetString("value", "div"); | |
| 343 params.SetString("id", "1"); | |
| 344 scoped_ptr<base::Value> value; | |
| 345 ASSERT_EQ(kOk, ExecuteFindChildElement(&session, params, &value).code()); | |
| 346 ASSERT_TRUE(value.get()); | |
| 347 ASSERT_TRUE(value->Equals(chrome->GetResult())); | |
| 348 ASSERT_EQ("frame_id3", chrome->GetFrame()); | |
|
kkania
2013/01/15 22:24:36
i think a lot of this code is duplicated, right? c
chrisgao (Use stgao instead)
2013/01/16 19:06:24
Done.
| |
| 349 ASSERT_EQ(webdriver::atoms::asString(webdriver::atoms::FIND_ELEMENT), | |
| 350 chrome->GetFunction()); | |
| 351 const base::ListValue* args = chrome->GetArgs(); | |
| 352 ASSERT_TRUE(args); | |
| 353 base::DictionaryValue locator_param; | |
| 354 locator_param.SetString("tag name", "div"); | |
| 355 base::DictionaryValue root_element_param; | |
| 356 root_element_param.SetString("ELEMENT", "1"); | |
| 357 base::ListValue expected_args; | |
| 358 expected_args.Append(locator_param.DeepCopy()); | |
| 359 expected_args.Append(root_element_param.DeepCopy()); | |
| 360 ASSERT_TRUE(expected_args.Equals(args)); | |
| 361 } | |
| 362 | |
| 363 TEST(CommandsTest, FailedFindChildElement) { | |
| 364 Session session("id", | |
| 365 scoped_ptr<Chrome>(new FindElementChrome(false, true, 1))); | |
| 366 session.implicit_wait = 0; | |
| 367 base::DictionaryValue params; | |
| 368 params.SetString("using", "id"); | |
| 369 params.SetString("value", "a"); | |
| 370 params.SetString("id", "1"); | |
| 371 scoped_ptr<base::Value> value; | |
| 372 ASSERT_EQ(kNoSuchElement, | |
| 373 ExecuteFindChildElement(&session, params, &value).code()); | |
| 374 } | |
| 375 | |
| 376 TEST(CommandsTest, SuccessfulFindChildElements) { | |
| 377 FindElementChrome* chrome = new FindElementChrome(true, false, 2); | |
| 378 Session session("id", scoped_ptr<Chrome>(chrome)); | |
| 379 session.implicit_wait = 100; | |
| 380 session.frame = "frame_id4"; | |
| 381 base::DictionaryValue params; | |
| 382 params.SetString("using", "class name"); | |
| 383 params.SetString("value", "c"); | |
| 384 params.SetString("id", "1"); | |
| 385 scoped_ptr<base::Value> value; | |
| 386 ASSERT_EQ(kOk, ExecuteFindChildElements(&session, params, &value).code()); | |
| 387 ASSERT_TRUE(value.get()); | |
| 388 ASSERT_TRUE(value->Equals(chrome->GetResult())); | |
| 389 ASSERT_EQ("frame_id4", chrome->GetFrame()); | |
| 390 ASSERT_EQ(webdriver::atoms::asString(webdriver::atoms::FIND_ELEMENTS), | |
| 391 chrome->GetFunction()); | |
| 392 const base::ListValue* args = chrome->GetArgs(); | |
| 393 ASSERT_TRUE(args); | |
| 394 base::DictionaryValue locator_param; | |
| 395 locator_param.SetString("class name", "c"); | |
| 396 base::DictionaryValue root_element_param; | |
| 397 root_element_param.SetString("ELEMENT", "1"); | |
| 398 base::ListValue expected_args; | |
| 399 expected_args.Append(locator_param.DeepCopy()); | |
| 400 expected_args.Append(root_element_param.DeepCopy()); | |
| 401 ASSERT_TRUE(expected_args.Equals(args)); | |
| 402 } | |
| 403 | |
| 404 TEST(CommandsTest, FailedFindChildElements) { | |
| 405 Session session("id", | |
| 406 scoped_ptr<Chrome>(new FindElementChrome(false, false, 1))); | |
| 407 session.implicit_wait = 0; | |
|
kkania
2013/01/15 22:24:36
isn't this set to 0 by default; fix the other = 0
chrisgao (Use stgao instead)
2013/01/16 19:06:24
Done.
| |
| 408 base::DictionaryValue params; | |
| 409 params.SetString("using", "id"); | |
| 410 params.SetString("value", "a"); | |
| 411 params.SetString("id", "1"); | |
| 412 scoped_ptr<base::Value> value; | |
| 413 ASSERT_EQ(kOk, ExecuteFindChildElements(&session, params, &value).code()); | |
| 414 base::ListValue* list; | |
| 415 ASSERT_TRUE(value->GetAsList(&list)); | |
| 416 ASSERT_EQ(0U, list->GetSize()); | |
| 417 } | |
| 418 | |
| 381 namespace { | 419 namespace { |
| 382 | 420 |
| 383 class ErrorCallFunctionChrome : public StubChrome { | 421 class ErrorCallFunctionChrome : public StubChrome { |
| 384 public: | 422 public: |
| 385 ErrorCallFunctionChrome() {} | 423 explicit ErrorCallFunctionChrome(StatusCode code) : code_(code) {} |
| 386 virtual ~ErrorCallFunctionChrome() {} | 424 virtual ~ErrorCallFunctionChrome() {} |
| 387 | 425 |
| 388 // Overridden from Chrome: | 426 // Overridden from Chrome: |
| 389 virtual Status CallFunction(const std::string& frame, | 427 virtual Status CallFunction(const std::string& frame, |
| 390 const std::string& function, | 428 const std::string& function, |
| 391 const base::ListValue& args, | 429 const base::ListValue& args, |
| 392 scoped_ptr<base::Value>* result) OVERRIDE { | 430 scoped_ptr<base::Value>* result) OVERRIDE { |
| 393 return Status(kUnknownError); | 431 return Status(code_); |
| 394 } | 432 } |
| 433 | |
| 434 private: | |
| 435 StatusCode code_; | |
| 395 }; | 436 }; |
| 396 | 437 |
| 397 } // namespace | 438 } // namespace |
| 398 | 439 |
| 399 TEST(CommandsTest, ErrorFindElement) { | 440 TEST(CommandsTest, ErrorFindElement) { |
| 400 Session session("id", scoped_ptr<Chrome>(new ErrorCallFunctionChrome())); | 441 Session session("id", |
| 442 scoped_ptr<Chrome>(new ErrorCallFunctionChrome(kUnknownError))); | |
| 401 base::DictionaryValue params; | 443 base::DictionaryValue params; |
| 402 params.SetString("using", "id"); | 444 params.SetString("using", "id"); |
| 403 params.SetString("value", "a"); | 445 params.SetString("value", "a"); |
| 404 scoped_ptr<base::Value> value; | 446 scoped_ptr<base::Value> value; |
| 405 ASSERT_EQ(kUnknownError, ExecuteFindElement(&session, params, &value).code()); | 447 ASSERT_EQ(kUnknownError, ExecuteFindElement(&session, params, &value).code()); |
| 406 ASSERT_EQ(kUnknownError, | 448 ASSERT_EQ(kUnknownError, |
| 407 ExecuteFindElements(&session, params, &value).code()); | 449 ExecuteFindElements(&session, params, &value).code()); |
| 408 } | 450 } |
| 451 | |
| 452 TEST(CommandsTest, ErrorFindChildElement) { | |
| 453 Session session("id", | |
| 454 scoped_ptr<Chrome>(new ErrorCallFunctionChrome(kStaleElementReference))); | |
| 455 base::DictionaryValue params; | |
| 456 params.SetString("using", "id"); | |
| 457 params.SetString("value", "a"); | |
| 458 params.SetString("id", "1"); | |
| 459 scoped_ptr<base::Value> value; | |
| 460 ASSERT_EQ(kStaleElementReference, | |
| 461 ExecuteFindChildElement(&session, params, &value).code()); | |
| 462 ASSERT_EQ(kStaleElementReference, | |
| 463 ExecuteFindChildElements(&session, params, &value).code()); | |
| 464 } | |
| OLD | NEW |