2012-07-26 36 views
32

Tôi vừa mới thực hiện xuất một mã IDE selenium của mình sang trình điều khiển web selenium. Tôi đã tìm thấy rằng rất nhiều các lệnh mà làm việc trong IDE hoặc không làm việc hoặc selenium trình điều khiển web tuyên bố không hỗ trợ ở tất cả. Cho đến nay tôi đã giải quyết những vấn đề này tại một thời điểm ít hơn lý tưởng ...nhấp vào lệnh trong selenium webdriver không hoạt động

Hiện tại tôi đang tìm hiểu lý do tại sao nhấp vào nút không hoạt động với trình điều khiển web trong khi trước đó nó đã hoạt động selenium IDE. Trình duyệt của tôi là FF 13 và hệ điều hành của tôi là Ubuntu.

Code Snippet

WebElement loginButton = driver.findElement(By.name("submit")); 
loginButton.click(); 

tôi đã cố gắng trước đây

driver.findElement(By.name("submit")).click(); 

tuy nhiên dòng trên thất bại là tốt. Phần tử được chọn, tuy nhiên nó không đăng nhập chúng tôi theo ý muốn. Tôi tìm thấy các trang khác có vấn đề tương tự, nhưng vấn đề của họ dường như là với Internet Explorer không phải Firefox. Tôi thậm chí không muốn nghĩ về những vấn đề mà IE sẽ đưa tôi xuống đường.

cảm ơn,

P.S. Một mẹo tốt hơn để di chuyển từ selenium IDE sang Selenium Webdriver mà không mất tất cả các bài kiểm tra mà tôi đã viết cũng có thể giải quyết vấn đề này.

+0

bạn đã cố gắng để 'khẳng định loginButton.isDisplayed() (trong môi trường của tôi cho một nút!); '? –

+2

khi bạn nói thao tác nhấp() không thành công? Bạn có nhận được bất kỳ lỗi hoặc ngoại lệ nào không.Vui lòng đăng chúng để hiểu tại sao thao tác nhấp() không thành công. –

Trả lời

67

Nếu bạn biết chắc chắn rằng nguyên tố này xuất hiện, bạn có thể thử này để mô phỏng các nhấp chuột - nếu .Click() không được làm việc

driver.findElement(By.name("submit")).sendKeys(Keys.Return); 

hoặc

driver.findElement(By.name("submit")).sendKeys(Keys.Enter); 
+1

isnt it Keys.Enter? –

+0

@PavelJanicek hoặc là một trong những sẽ làm các trick nhưng chỉnh sửa để hiển thị cả hai;) – TheLifeOfSteve

+3

wow. Tôi không biết điều này. Upvote để dạy cho tôi một cái gì đó mới :) –

1

Không có gì sai với phiên bản mã của bạn. Bất cứ điều gì gây ra điều này, đó không phải là nó.

Bạn đã kiểm tra bộ định vị của mình chưa? Phần tử của bạn chắc chắn có tên = submit không id = submit?

2

Cảm ơn tất cả các câu trả lời tất cả mọi người! Tôi đã tìm thấy một giải pháp, hóa ra tôi đã không cung cấp đủ mã trong câu hỏi của tôi.

Vấn đề là NOT với hàm click() sau tất cả, nhưng thay vào đó liên quan đến xác thực cas được sử dụng với dự án của tôi. Trong Selenium IDE, kiểm tra đăng nhập của tôi đã thực thi lệnh "mở" tới vị trí sau,

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security 

Điều đó có hiệu quả. Tôi đã xuất thử nghiệm cho trình quản trị web Selenium, nơi tự nhiên bảo tồn vị trí đó. Lệnh trong Selenium Webdriver là,

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security"); 

Vì lý do tôi chưa hiểu những điều trên không thành công. Khi tôi thay đổi nó thành,

driver.get(baseUrl + "MOREURL/"); 

Lệnh nhấp đột nhiên bắt đầu làm việc ... Tôi sẽ chỉnh sửa câu trả lời này nếu tôi có thể tìm ra lý do chính xác.

Lưu ý: Tôi đã che khuất các URL được sử dụng ở trên để bảo vệ sản phẩm của công ty tôi.

+0

Bạn nói rằng nó không thành công trên IE không phải trên firefox. Bạn có chắc chắn tình trạng này chỉ do địa điểm gây ra không? –

+0

Vui lòng chỉnh sửa câu hỏi gốc thay vì đăng cập nhật làm câu trả lời. –

1

Tôi đã sử dụng firefox và một số lý do, nó không lấy lệnh nhấp mặc dù từ 2 tháng qua nó đã hoạt động. Cảm giác của tôi là sử dụng sendKeys và trang này giải quyết được vấn đề. Bây giờ tôi đang sử dụng SendKeys (Keys.Enter)

5

Một điều quan trọng cần chú ý là liệu một nút có được bật hay không. Bạn vẫn có thể nhấp vào chúng và không có gì sẽ rơi xuống và các phần tử là có nhưng nó không phải là đã sẵn sàng để được nhấp vào vì vậy chỉ không làm bất cứ điều gì.

Tôi đã sử dụng trình quản trị web và điều này đã khiến tôi mất nhiều thời gian nhất để tìm ra điều này!

Các phương pháp sau đây dường như làm việc đáng tin cậy

private void TryClick(By selector) 
    { 
     var wait = WaitUpTo(TimeSpan.FromSeconds(10)); 
     var element = wait.Until(ExpectedConditions.ElementIsVisible((selector))); 

     //really important bit! 
     WaitUpTo(TimeSpan.FromSeconds(5)) 
      .Until(d => element.Enabled); 

     element.Click(); 
    } 

bạn sử dụng nó như một cái gì đó

TryClick(By.XPath("//button[contains(.//*,'Some Text')]")); 
Các vấn đề liên quan