2010-11-15 32 views
9

Tôi đang cố gắng lấy yếu tố với jquery và Selenium IDe 1.0.8.Lấy phần tử với jquery và selenium IDE 1.0.8

<td>storeValue</td> 
<td>$('#result').find('img').filter('[alt=&quot;NameOfPhoto&quot;]').eq(0)</td> 
<td></td> 

Và trong nhật ký tôi nhận được

[error] Element $('#result').find('img').filter('[alt="NameOfPhoto"]').eq(0) not found 

Khi tôi đặt lệnh này trong firebug tôi nhận được yếu tố này:/

Tại sao nó không hoạt động?

EDIT: Hoặc ví dụ: bạn có thể cho tôi mã làm cách nào để lấy id của đối tượng đầu tiên có thẻ JAVA ở trang chính của stackoverflow.

TAG:

<a rel="tag" title="show questions tagged 'java'" class="post-tag" href="https://stackoverflow.com/questions/tagged/java">java</a> 

và ví dụ do:

<div id="question-summary-4303985" class="question-summary narrow"> 

là:

question-summary-4303985 

Trả lời

8

Dựa trên các bài đăng khác tôi đã thử những điều sau đây và nó đã hoạt động.

Thêm mã dưới đây để sử dụng extensions.js:

function jQuery (selector) 
{ 
    return selenium.browserbot.getUserWindow().jQuery(selector); 
} 

Sau đó bạn có thể truy cập bất kỳ chức năng jQuery bằng cách sử dụng từ khóa jQuery thay vì $. Chỉ cần đảm bảo rằng trang bạn đang thử nghiệm đang tham chiếu tệp js jQuery.

+0

Tuyệt vời! Điều này làm việc cho tôi! tôi đã cố gắng những gì đã được đề xuất trong câu trả lời này http://stackoverflow.com/questions/2814007/how-do-i-add-a-jquery-locators-to-selenium-remote-control/2819798#2819798 có lỗi jQuery không phải là một hàm, sau đó thêm tập lệnh trên như bạn đã nói. Đã làm việc! Cảm ơn! –

0

hãy thử sử dụng jQuery thay vì $(). Ký hiệu đô la có ý nghĩa khác trong selen.

EDIT

Theo như tôi có thể nói bạn không thể sử dụng jQuery để chọn các yếu tố. Tìm kiếm trên Google không hiển thị gì cả. Chỉ cần sử dụng Xpath.

0

Ví dụ về lưu trữ ngày hiện tại với JavaScript và echo nó vào Selenium log giao diện điều khiển bằng cách sử dụng ${}:

<tr> 
    <td>store</td> 
    <td>javascript{new Date}</td> 
    <td>foo</td> 
</tr> 
<tr> 
    <td>echo</td> 
    <td>${foo}</td> 
    <td></td> 
</tr> 

Như bạn thấy sử dụng cửa hàng với một kết quả của một biểu thức JavaScript thêm javascript{} arround biểu thức .

Ví dụ của bạn sử dụng javascript{storedVars['bar']} để xuất biến đã lưu trữ.

<tr> 
    <td>store</td> 
    <td>javascrip{jQuery('#result').find('img').filter('[alt="NameOfPhoto"]').eq(0)}</td> 
    <td>bar</td> 
</tr> 
<tr> 
    <td>open</td> 
    <td>javascript{storedVars['bar']}</td> 
    <td></td> 
</tr> 

JavaScript trong Selenium:

Với javascript{alert('hello')} bạn có thể chạy JavaScript/jQuery trong lĩnh vực giá trị.

Ngoài ra còn có một phần mở rộng cho Selenium để hiển thị mà vars được lưu trữ: http://reallysimplethings.wordpress.com/2010/09/28/the-stored-variables-viewer-plugin-for-selenium-ide-v1-3-released/

+0

Nó không hoạt động:/Tôi nhận được: lỗi [lỗi] Ngoại lệ không mong muốn: thư -> jQuery không phải là hàm, tên tệp -> chrome: // selenium-ide/content/selenium/scripts/selenium-api. js, lineNumber -> 2490, stack -> ("javascript {jQuery ('# result'). tìm ('img'). bộ lọc ('[alt = \" NameOfPhoto \ "]') .qq (0)}") – user278618

+0

Kiểm tra tài liệu chính thức về cách lưu trữ vars. – powtac

+0

tôi nghĩ rằng user278618 là đúng, tôi không thể truy cập jQuery theo cách đó, và tôi không chắc chắn nếu nó có bất cứ điều gì để làm với các biến được lưu trữ, sửa chữa cho tôi nếu tôi sai. –

0

Bạn đã kèm jQuery trong jar Selenium? Nếu không, bạn không thể sử dụng cú pháp đó.

+0

Không, tôi không biết. làm như thế nào? – user278618

+0

Nếu bạn đang sử dụng Selenium RC, hãy kiểm tra bài đăng trên blog http: //johnjianfang.blogspot của Jian.com/2009/04/how-to-use-jquery-to-create-custom.html. Đối với IDE, bạn có thể thêm jquery làm phần mở rộng của người dùng. Tham khảo tài liệu selenium. – Rajasankar

7

Để sử dụng jQuery với Selenium IDE, vị trí của nó ở bên dưới. (Hãy chắc chắn đã tải jQuery trong trang của bạn)

this.page().getCurrentWindow().wrappedJSObject.jQuery() 

Bạn có thể lưu trữ vị trí chức năng trong biến Selenium.

<tr> 
    <td>store</td> 
    <td>this.page().getCurrentWindow().wrappedJSObject.jQuery</td> 
    <td>jq</td> 
</tr> 

Sau đó, bạn có thể sử dụng chúng trong thử nghiệm của bạn như:

<tr> 
    <td>assertEval</td> 
    <td>${jq}('div').attr('foo')</td> 
    <td>bar</td> 
</tr> 

Trên phù hợp <div foo='bar' /> sử dụng jQuery.


Chỉnh sửa: Hoặc bạn có thể truy cập nó bằng:

this.browserbot.getUserWindow().jQuery 
selenium.browserbot.getUserWindow().jQuery 

nguồn thay thế: http://cssgreut.wordpress.com/2010/12/20/run-selenium-ide-tests-with-jquery-selectors/

+0

+1 để thực sự hiển thị nguồn! Điều đó dường như vượt ra ngoài hầu hết mọi người giúp đỡ với Selenium. – Scottingham

0

Hãy thử hướng dẫn này từ German Rumm's blog

Trước tiên, tải Sizzle, đó là công cụ chọn cho jQuery và giải nén sizzle.js thành một chuyển đổi vị trí tiềm năng.
Thứ hai, tạo tệp người dùng-extensions.js trống. Tên có thể là bất cứ điều gì bạn muốn bằng cách này.
Thêm này để sử dụng extensions.js

PageBot.prototype.locateElementBySizzle = function(locator, inDocument) { 
    var results = []; 
    window.Sizzle(locator, inDocument, results); 
    return results.length > 0 ? results[0] : null; 
} 

Thứ ba, đi đến Selenium IDE, Options -> Options ... và thêm sizzle.js và dễ sử dụng extensions.js để “mở rộng Lõi Selenium” .
Restart Selenium IDE (chỉ cần đóng tất cả các trường của nó và mở nó một lần nữa), và bây giờ bạn có thể sử dụng những lời sáo rỗng = (định vị) ở khắp mọi nơi, trong đó “định vị” là cần thiết

chọn của bạn sẽ looklike:

#result img[alt="NameOfPhoto"]:eq(0)

selectors JQuery chủ yếu xuất phát từ bộ chọn CSS, vì vậy bạn có thể sử dụng chúng cũng ở selen

css=cssSelector

Các vấn đề liên quan