2011-09-19 39 views
13

Câu hỏi này nhận được câu trả lời tuyệt vời trong jquery và tôi đã tự hỏi nếu ai đó có thể đưa ra một ví dụ về this trong Java xin vui lòng?webdriver classname với không gian bằng cách sử dụng java

Tôi đang làm driver.findElement(By.className("current time")).click(); Không gian là vấn đề và tôi thấy giải thích tại liên kết, nhưng tôi không biết cách xử lý trong java và không có quyền truy cập để thay đổi tên lớp.

Dán ví dụ về những gì tôi nhận được trong id kiểm tra firefox: Ví dụ với cssSelector dưới đây không hoạt động, nhưng tôi có thể thiếu một cái gì đó.

<span> 
<a class="current time" href="http://someurl/" onclick="s_objectID="http://someur/">url</a> 
</span> 
+7

Cần lưu ý rằng 'class =" current time "' khai báo một phần tử với ** hai ** classes: 'current' và' time'. Đó là * không * một lớp duy nhất 'thời gian hiện tại'. –

+0

@ JoachimSauer Đây là một thông tin tuyệt vời cho người mới – rakeshNS

Trả lời

38

Thay vì tên lớp, bạn có thể sử dụng bộ chọn css. Bạn không đề cập đến tên thẻ cho lớp 'thời gian hiện tại'. Tôi giả định nó là đầu vào, vì vậy việc chọn css của bạn được,

WebElement element = driver.findElement(By.cssSelector("input[class='current time']")); 
element.click(); 

Chỉnh sửa # 1 Dựa trên html cung cấp,

Nhìn vào html trong bình luận của bạn, có vẻ như bạn có khá vài tùy chọn để tìm webElement. Dưới đây là lựa chọn của bạn,

WebElement element = driver.findElement(By.cssSelector("a[class='current time']")); 
element.click(); 

hay này nên làm việc quá,

WebElement element = driver.findElement(By.cssSelector("a.current.time")); 
element.click(); 

Bạn cũng có thể sử dụng Văn bản liên kết từ các phần tử là liên kết. Từ html mà bạn cung cấp, các văn bản liên kết là 'url'

WebElement element = driver.findElement(By.linkText("url")); 
element.click(); 

Bạn cũng có thể sử dụng By.partialLinkText("partial link text here");

Bạn cũng có thể sử dụng xpath như:

WebElement element = driver.findElement(By.xpath("//a[@class='current time']")); 
element.click(); 

OR,

WebElement element = driver.findElement(By.xpath("//a[text() = 'url']")); 
element.click(); 
+0

Xin chào, cảm ơn vì đã giúp đỡ. Điều đó đã không làm việc cho tôi, tôi sẽ dán các mảnh mà tôi đang cố gắng bấm vào. Điều này hoạt động khi tên lớp là một từ, nhưng đó là hai từ trong một số ví dụ như dưới đây. Tôi đã thử cssSelector nhưng tôi mới đến điều này và có thể dễ dàng thiếu một cái gì đó. url Green

+1

Tôi đã cập nhật câu trả lời dựa trên html bạn đã cung cấp để xem tốt hơn. Hãy dùng thử và cho chúng tôi biết – nilesh

+0

Cảm ơn sự giúp đỡ. Tôi đã phải sử dụng linktext mà tôi đã cố gắng để tránh, tôi mới đến điều này vì vậy có thể không hiện tại nói lý do tại sao các ví dụ khác đã không làm việc. – Green

2

Đối với một bài kiểm tra ít mong manh hơn, một tùy chọn khác là sử dụng XPath không phụ thuộc vào thứ tự các lớp, như :

0

Bất cứ khi nào bạn tìm thấy một số khoảng trống trong tên lớp bạn cần chuyển sang cssSelector Locator.

Chuyển đổi tên lớp thành cssSelector nếu có khoảng trắng như dưới đây.

Trong trường hợp của bạn

WebElement element = driver.findElement(By.cssSelector(".current.time']")); 
element.click(); 

PS: thêm . [chấm] khi bắt đầu tên lớp và thay thế khoảng trắng bằng . [chấm] để chuyển đổi tên lớp thành cssSelector.

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